C++ 获取继承基类的元组';类型

C++ 获取继承基类的元组';类型,c++,c++17,variadic-templates,typedef,C++,C++17,Variadic Templates,Typedef,我正在寻找一种方法来获取所有继承类的元组包,但找不到 意图:如果类继承自模板基类,则需要静态断言。模板参数是从基本模板的专门化推导出来的,因为我首先可以推导出它的类型名。 私人继承 这能做到吗 class Inherited : ClassA, ClassB ..., Class N {}; //Expected usage templ_traits<Inherited>::bases_tuple; templ_traits<Inherited>::bases_coun

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

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

这能做到吗

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

//Expected usage
templ_traits<Inherited>::bases_tuple;
templ_traits<Inherited>::bases_count;
类继承:类A,类B…,类N
{};
//预期用途
模板特征::基元组;
模板特征::基数计数;

用当前语言无法得到这样的列表,但是您可以使用
std::is_base
来解决实际问题

发件人:


“这可以做到吗?”就像您可以得到所有类数据成员类型的元组一样。你所说的是最终的反映,这不是C++在这一点上真正存在的东西。尽管有合法的反思需求,但你的用例可能有一个解决方法吗?考虑一下你问这个问题的理由。也许有另一种方法可以满足您的需要?如果您可以在层次结构的每个类上添加一些类型别名,就可以做到这一点。这是一个选项吗?@StoryTeller我的特殊案例正在运行,但我希望提高使用率。我不想提供一个基本抽象类,尽管它可以工作。稍后,当我用正确的互联网连接到我的电脑时,我会用我最初的意图更新帖子。然而,我认为这个问题本身就很有趣。
#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