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