gpt4 book ai didi

c++ - C++ 类父类型列表

转载 作者:行者123 更新时间:2023-11-28 02:47:30 25 4
gpt4 key购买 nike

在新的 C++11 标准中,我们有类型列表(在可变参数模板中)和一些编译时方法检查类 A 是否是 B 的基类。

现在,有什么办法,如何获取一个类的基类列表?

例子:

class A {};
class B {};
class C {};
class AB : public A, public B {};
class Test : public AB, public C {};

template<typename ...BaseTypes>
class BaseTypeList
{
public:

static const int size = sizeof...(BaseTypes);

// ...
};

std::cout << "Size: " << BaseTypeList<GET_BASE_TYPES(Test)>::size
<< std::endl;

输出:大小:2(ABC)。

(在这个例子中,我要求的是 GET_BASE_TYPES(...) 的实现。)

注意事项:

  • 我正在寻找便携方式。在最坏的情况下,我可以接受 gcc、MS VS(两者都不是至少一个)和(可选)clang。
  • 事实上,我不介意列表是否包含类本身(Test)或所有直接基类的基类(AB ).

最佳答案

如果您使用的是 gcc,它会实现来自 TR2 的 std::tr2::direct_bases(参见 here)。我不知道它是 C++14 还是 17 的一部分,但它可以满足您的需求。

如代码注释中所述,枚举一个类的所有直接基类。类型列表的形式。

关于c++ - C++ 类父类型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23956248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com