2012-06-07 63 views
1
struct A 
{ 
    A(int v):value(v){} 
    int someFun(){return value;} 
    int someOtherFun(int v=0){return v+value;} 
    int value; 
}; 

int main() 
{ 
    boost::shared_ptr<A> a(new A(42)); 
    //boost::function<int()> b1(bind(&A::someOtherFun,a,_1)); //Error 
    boost::function<int()> b2(bind(&A::someFun,a)); 
    b2(); 
    return 0; 
} 

bind(&A::someOtherFun,a)();失敗,編譯錯誤:錯誤:無效使用非靜態成員函數的boost :: bind爲成員函數的默認值?

如何綁定someOtherFun類似someFun?即它們應該綁定到相同的boost :: function類型。

回答

2

A::someFun()A::someOtherFun()具有不同的類型:所述第一期望沒參數,所述第二預計1(其可被ommitted和編譯器插入defaqult值你)

嘗試:

bind(&A::someOtherFun, a, _1)(1); 

的問題是,當您通過bind()調用該函數時,編譯器不知道該綁定函數有一個默認參數值,因此給出了錯誤,因爲您沒有所需的參數

+0

沒有工作。仍然是同樣的錯誤。 – balki

+0

@balki - 我忘了爲參數添加佔位符。請參閱編輯的版本 – Attila

+0

是的,這是有效的。但是我想要做的是這樣的東西 'boost :: function b1(bind(&A :: someOtherFun,a,_1)); boost :: function b2(bind(&A :: someFun,a)) ;' – balki

相關問題