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