我們的一個類提供了tr1 :: function回調對象。當我嘗試分配一個成員函數時,雖然,我得到一個編譯器錯誤。下面C++:給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而不是函數指針。
或者只是'std :: tr1 :: bind(&Bar :: Respond,this)',沒有佔位符。 –
@Alexandre:如果沒有佔位符,它不起作用:http://www.ideone.com/k3VD9 – interjay
謝謝interjay,它在我使用綁定而不是使用=指定時有效。注意:我還必須使用佔位符,否則它不會編譯。 –