如何判断模板类是否具有某个成员函数?

时间:2012-07-14 06:47:42

标签: c++ templates c++11

  

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

1 个答案:

答案 0 :(得分:0)