C ++类父类型列表

时间:2014-05-30 13:52:42

标签: c++ c++11

使用新的C ++ 11标准,我们有类型列表(在可变参数模板中)和一些编译时方法,检查类A是否是B的基类。

现在,有什么办法,如何获取类的基类列表?

示例:

class A {};
class B {};
class C {};
class AB : public A, public B {};
class Test : public AB, public C {};

template<typename ...BaseTypes>
class BaseTypeList
{
public:

    static const int size = sizeof...(BaseTypes);

    // ...
};

std::cout << "Size: " << BaseTypeList<GET_BASE_TYPES(Test)>::size
    << std::endl;

输出:Size: 2ABC)。

(在这个例子中,我要求的是GET_BASE_TYPES(...)的实现。)

注意:

  • 我正在寻找便携式的方式。在最坏的情况下,我可以使用gcc,MS VS(两者,不是至少一部分)和(可选)铿锵。
  • 事实上,如果列表包含类本身(Test)或所有直接基类的基类(AB),我不介意。 / LI>

1 个答案:

答案 0 :(得分:2)

如果您正在使用gcc,它会从TR2实现std::tr2::direct_bases(请参阅here)。我不知道它是否是C ++ 14或17的一部分,但它可以做你想要的。

如代码评论中所述,Enumerate all the direct base classes of a class. Form of a typelist.