2012-07-14 152 views
0

可能重複:
Is it possible to write a C++ template to check for a member-function's existence?如何判斷模板類是否具有某個成員函數?

我需要一種方法來決定,如果一個模板類有一些成員函數,這樣我可以調用不同專業的功能。例如,我有以下類:

class A1 { 
    void a() const { cout << "a1" << endl; } 
}; 

class A2 { 
    void a() const { cout << "a2" << endl; } 
}; 

class B { 
    void b() const { cout << "b" << endl; } 
}; 

當我打電話給我的功能與A1或A2的實例作爲模板參數,我想打電話給一個過載(其可以利用a()),但如果它不不存在,我可以沒有它。

我在尋找標準和Boost類型特徵庫,但沒有發現這樣的東西。我基本上想是這樣的:

template <class T> 
typename enable_if<has_member<A, a>::value>::type 
f(const T& t) { 
    t.a(); 
} 

template <class T> 
typename enable_if<!has_member<A, a>::value>::type 
f(const T&) { 
    cout << "no a" << endl; 
} 

的問題是,我不知道任何has_member型性狀,我不知道如何實現它。

+0

如何,爲什麼你需要的?難道你不能使用模板專門化嗎?你可以通過調用a和另一個版本的方式來執行一個版本,而無需調用。並且其中一個模板參數應區分您實際採用的兩種模式中的哪一種? – Alex 2012-07-14 06:53:53

回答

相關問題