Один из наших классов предоставляет объект обратного вызова tr1 :: function. Когда я пытаюсь назначить ему функцию-член, я получаю ошибку компилятора.
Приведенные ниже примеры не проверены и приведены только для иллюстрации:
foo.h:
class Foo()
{
public:
Foo();
std::tr1::function<void (int x)> F;
}
bar.h:
class Bar()
{
public:
Bar();
Foo* foo;
void HookUpToFoo();
void Respond(int x);
}
Bar.cpp:
Bar()
{
this->foo = new Foo();
this->HookUpToFoo();
}
void Bar::HookUpToFoo()
{
this->foo->F = &Bar::Respond; // error
}
void Bar::Respond(int x)
{
// do stuff
}
Ошибка компилятора, которую мы получаем, относится к строке в xrefwrap и является
Ошибка 1 ошибка C2296: «. *»: Недопустимо, левый операнд имеет тип «int» C: \ Program Files \ Microsoft Visual Studio 9.0 \ VC \ include \ xrefwrap 64
.. Что я делаю неправильно при назначении делегата? Я хочу пойти по более современному маршруту и использовать tr1 :: function вместо указателей на функции.