Re[2]: Функция член базового класса в кач-ве параметра. Ошиб
От: Кодт Россия  
Дата: 21.12.09 12:33
Оценка:
Здравствуйте, -MyXa-, Вы писали:

MX>По-этому так можно:

Причём, TMethod может быть и не указателем на функцию-член, но и
— указателем на член-данное, для типа которого определён оператор ()
— произвольным типом, для которого перегружен оператор ->*, для результата которого определён оператор ()

http://codepad.org/svJSx0Jl
#define CPFE  cout << __PRETTY_FUNCTION__ << endl;

template<class X, class Y>
void foo(X x, Y y)
{
  CPFE;
  (x->*y)();
  cout << endl;
}

struct H
{
  void operator() () const { CPFE; }
};

struct I {};
struct J {};

struct A
{
  void f() { CPFE; } // функция-член
  void (*g)(); // указатель на свободную функцию
  H h; // указатель на функциональный объект
};
H operator ->* (A* a, I i) { CPFE; return H(); } // I в роли указателя на член
H operator ->* (A& a, J j) { CPFE; return H(); } // внезапно, A в роли указателя на непойми что!

void ag() { CPFE; }

int main()
{
  A a; a.g = ag;
  foo(&a, &A::f);
  foo(&a, &A::g);
  foo(&a, &A::h);
  foo(&a, I());
  foo( a, J());
}



Но это немножко не то. У топикстартера — на выходе унарная функция, принимающая только объект. То есть, это биндер времени компиляции.
А биндер времени исполнения — это любой дурак может. Хоть руками, хоть на бусте...
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.