2011-11-17 57 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);