2010-07-23 72 views
3

我使用boost(信號+綁定)和C++來傳遞函數引用。下面是代碼:綁定函數問題

#define CONNECT(FunctionPointer) \ 
     connect(bind(FunctionPointer, this, _1)); 

我用這個像這樣:

class SomeClass { 
    void test1() {} 
    void test2(int someArg) {} 

    SomeClass() { 
    CONNECT(&SomeClass::test1); 
    CONNECT(&SomeClass::test2); 
    } 
}; 

二測功能結合作品(測試2),因爲它至少有一個參數。第一次測試我有一個錯誤:

‘void (SomeClass::*)()’ is not a class, struct, or union type 

爲什麼我不能沒有參數傳遞函數?

回答

4

_1是一個佔位符參數,意思是「用第一個輸入參數替換」。方法test1沒有參數。

創建兩個不同的宏:

#define CONNECT1(FunctionPointer) connect(bind(FunctionPointer, this, _1)); 
#define CONNECT0(FunctionPointer) connect(bind(FunctionPointer, this)); 

但要記住macros are evil

而且使用這樣的:

class SomeClass { 
    void test1() {} 
    void test2(int someArg) {} 

    SomeClass() { 
    CONNECT1(&SomeClass::test1); 
    CONNECT0(&SomeClass::test2); 
    } 
}; 
+0

好吧,我udnerstand。我知道宏是邪惡的,但我的宏的身體是巨大而醜陋的。當然,如果它像我的樣本,我會用它。謝謝。 – Ockonal 2010-07-23 11:29:45