使用新的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: 2
(AB
和C
)。
(在这个例子中,我要求的是GET_BASE_TYPES(...)
的实现。)
注意:
Test
)或所有直接基类的基类(A
,B
),我不介意。 / LI>
答案 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.