相关疑难解决方法(0)

C++ 编译时一个类的子类列表

我正在考虑如何创建从模板基类派生的所有类的列表。

首先我想要一个模板基类:

template <typename T>
class Base
{
public:
    Base() {};
    virtual ~Base() {};
};
Run Code Online (Sandbox Code Playgroud)

以及一个继承自模板基类的类:

class Foo : public Base<Foo >
{
public:
    Foo () {};
    virtual ~Foo () {};
};
Run Code Online (Sandbox Code Playgroud)

可能还有任意数量的其他子类,例如Foo. 结果应该看起来像这样:

std::vector<std::string> allTemplates = Base<Base>::getAllTemplateClasses();
Run Code Online (Sandbox Code Playgroud)

我的问题是是否可以在编译时创建所有子类的列表?魔术应该发生在基础班上,或者在儿童班上花费很少的努力。

我之前一直在思考不同的方向。首先我认为可以使用constexpr. 就像每个子类都需要一个带有签名的静态函数:

constexpr static std::string name() { "Foo";}
Run Code Online (Sandbox Code Playgroud)

或者认为也许可以使用元编程并创建一个编译时列表,例如使用 Template-Meta 的编译时数据结构示例。这里的问题是我不知道模板创建的头部。

接下来我正在考虑使用宏并构建一个枚举结构,就像这样枚举结构扩展一样。所以我找不到解决这个问题的办法,我想问你是否有可能?

编辑:

说清楚:我想要一个子对象的列表,而不需要创建它们。

c++ templates compilation metaprogramming type-traits

5
推荐指数
1
解决办法
4489
查看次数