可能重复:
是否可以编写 C++ 模板来检查成员函数的存在?
我需要一种方法来确定模板类是否具有某些成员函数,以便我可以为函数调用不同的特化。例如,我有以下课程:
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
类型特征,也不知道如何实现它。