2011-11-17 56 views
1

我想创建一个功能对象,可以在稍后调用(回调)从 构建一个对象和该对象的成员函数。使用方法和对象创建功能对象

class A 
{ 
public: 

void AnyMethod() { cout << "Hello" << endl; } 
}; 

int main() 
{ 
    A a; 
    function<???>f1(&A::AnyFunc, &a); // ????? 

    ... 
    f1(); 
} 

我有点困惑,因为创建一个线程是很简单的:

thread t1 (&A::AnyFunc, &a); 
... 
t1.join(); 

它是简单的,如果我有一个兰巴功能使用它,但是这是一个有点开销,我想避免。

function<void(void)> f2([&a](){ a.AnyFunc(); }); // works fine 

也许有更好的方法来获得可调用的对象?

+4

使用lambda不应该添加任何开销。事实上,std :: function对象可能会比使用自动类型lambda增加更多开销。 – bames53

+1

事实上 - lambdas比“bind”轻得多,而'function <>'会比两者都有更多的开销。 – ildjarn

回答

2
std::function<void()> f1 = std::bind(&A::AnyMethod, &a);