0

可能重复:
是否可以编写 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类型特征,也不知道如何实现它。

4

1 回答 1

-1

为该 http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Member_Detector使用成员检测成语

于 2012-07-14T06:57:55.250 回答