获取继承基类类型的元组

Get tuple of inherited base classes' types

本文关键字:元组 类型 基类 继承 获取      更新时间:2023-10-16

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

打算:我需要静态断言一个类是否继承自模板基类。 模板参数是从基本模板的专用化中推断出来的,因为我可以首先推断出它的类型名称。私有继承。

这完全可以做到吗?

class Inherited : ClassA, ClassB ..., Class N
{};
//Expected usage
templ_traits<Inherited>::bases_tuple;
templ_traits<Inherited>::bases_count;
你不能

用当前的语言得到这样的列表,但是你可以只使用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