[C++] Указатель на константную функцию-член

erotic

class Some
{
public:
int& operator[] (size_t ind);
int operator[] (size_t ind) const;
}
Как получить адрес второй функции-члена - константного оператора индексирования?

Vladislav177Rus

13.4.5
#include <cstdio>

using namespace std;

class A {
int i;
public:
int& operator[] (int index){
i = index * 3;
return i;
}

int operator[] (int index) const {
return index * 2;
}
};

int main{
A a;
int (A::*f1int) const = &(A::operator []);
int& (A::*f2int) = &(A::operator []);
printf("0x%08x 0x%08x\n", f1, f2);
printf("%d %d\n", (a.*f15 (a.*f25;
return 0;
}

erotic

Точно... По ходу, забыл & что-ли убрать после int в const-версии...

erotic

Блин, объясните мне, я вообще не догоняю, почему так происходит:
если объявить константный тип "int (A::*f1int) const", то ему присваивается константный оператор, все правильно.
Если же так сделать:
 
 	template<class _Result,	class _Ty, class _Arg> inline
std::const_mem_fun1_ref_t<_Result, _Ty, _Arg> const_mem_fun_ref(_Result (_Ty::*_Pm_Arg) const)
{ // return a const_mem_fun1_t functor adapter
return std::mem_fun_ref(_Pm);
}

cout << const_mem_fun_ref(&(A::operator [] (a);


то не компилируется вовсе:
 
d:\home\\documents\programming\c\cur\test\test\test.cpp(50) : error C2914: 'const_mem_fun_ref' : cannot deduce template argument as function argument is ambiguous
d:\home\\documents\programming\c\cur\test\test\test.cpp(50) : error C2784: 'std::const_mem_fun1_ref_t<_Result,_Ty,_Arg> const_mem_fun_ref(_Result (__thiscall _Ty::* _Arg) const)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
     d:\home\\documents\programming\c\cur\test\test\test.cpp(39) : see declaration of 'const_mem_fun_ref'
 
Оставить комментарий
Имя или ник:
Комментарий: