2009-07-29 209 views
2

是否可以傳遞函數指針作爲模板參數而不使用typedef?函數指針作爲模板參數?

template<class PF> 
class STC { 
    PF old; 
    PF& ptr; 
public: 
    STC(PF pf, PF& p) 
     : old(*p), ptr(p) 
    { 
     p = pf; 
    } 
    ~STC() { 
     ptr = old; 
    } 
}; 

void foo() {} 
void foo2() {} 

int main() { 
    void (*fp)() = foo; 
    typedef void (*vfpv)(); 
    STC<vfpv> s(foo2, fp); // possible to write this line without using the typedef? 
} 
+0

雖然沒有傳遞函數指針作爲模板參數,但它正在傳遞類型_函數指針。 – leftaroundabout 2012-03-27 14:06:43

回答

11

是:

STC<void (*)()> s(foo2, fp); // like this

這是一樣服用typedef聲明和去除typedef關鍵字和名稱。

3

這是完全可能的, 我也建議查找boost :: function & boost :: bind作爲替代解決方案。

0

我不能像Maciek建議的那樣使用boost(例如,您不能在項目中使用外部庫),您可能會嘗試使用函子。