可能重复:
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
类型特征,我不知道如何实现它。