[C++] Указатель на константную функцию-член
#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;
}
Точно... По ходу, забыл & что-ли убрать после int в const-версии...
если объявить константный тип "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'
Оставить комментарий
erotic
class Some{
public:
int& operator[] (size_t ind);
int operator[] (size_t ind) const;
}
Как получить адрес второй функции-члена - константного оператора индексирования?