获取继承的基类类型的元组

时间:2019-04-11 05:10:10

标签: c++ c++17 variadic-templates typedef

我正在寻找一种获取所有继承的类的元组包的方法,找不到一个。

意图:如果类是从模板基类继承的,我需要静态断言。模板参数是从基本模板的专业化推导而来的,因为首先我可以推断出它的类型名。 私有继承。

这能做到吗?

class Inherited : ClassA, ClassB ..., Class N
{};

//Expected usage
templ_traits<Inherited>::bases_tuple;
templ_traits<Inherited>::bases_count;

1 个答案:

答案 0 :(得分:0)

您无法使用当前的语言获得该列表,但是您可以使用std::is_base解决实际问题。

来自https://en.cppreference.com/w/cpp/types/is_base_of

#include <iostream>
#include <type_traits>

class A {};

class B : A {};

class C {};

int main() 
{
    std::cout << std::boolalpha;
    std::cout << "a2b: " << std::is_base_of<A, B>::value << '\n';
    std::cout << "b2a: " << std::is_base_of<B, A>::value << '\n';
    std::cout << "c2b: " << std::is_base_of<C, B>::value << '\n';
    std::cout << "same type: " << std::is_base_of<C, C>::value << '\n';
}

输出:

a2b: true
b2a: false
c2b: false
same type: true