我正在寻找一种获取所有继承的类的元组包的方法,找不到一个。
意图:如果类是从模板基类继承的,我需要静态断言。模板参数是从基本模板的专业化推导而来的,因为首先我可以推断出它的类型名。 私有继承。
这能做到吗?
class Inherited : ClassA, ClassB ..., Class N
{};
//Expected usage
templ_traits<Inherited>::bases_tuple;
templ_traits<Inherited>::bases_count;
答案 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