gpt4 book ai didi

c++ - 在 C++ 可执行文件中枚举派生类

转载 作者:搜寻专家 更新时间:2023-10-31 00:18:27 25 4
gpt4 key购买 nike

假设您的 C++ 应用程序中有基类和几个派生类。您想要枚举从该基派生的所有类而不实例化派生类,比如在类名列表框中将它们呈现给用户。显然,所需信息位于应用程序中的某个位置。如何取回?

最佳答案

您可以添加静态注册器元素。像这样:

基础.hpp:

#include <string>
#include <typeindex>
#include <unordered_map>

using typemap = std::unordered_map<std::type_index, std::string>;

struct Base
{
/* ... */
static typemap & registry();
};

template <typename T> struct Registrar
{
Registrar(std::string const & s) { Base::typemap()[typeid(T)] = s; }
};

基础.cpp:

#include "Base.hpp"
typemap & Base::registry() { static typemap impl; return impl; }

DerivedA.hpp:

#include "Base.hpp"

struct DerivedA : Base
{
static Registrar<DerivedA> registrar;
/* ... */
};

DerivedA.cpp:

#include "DerivedA.hpp"
Registrar<DerivedA> DerivedA::registrar("My First Class");

现在,在 main() 启动后的任何时候,您都可以调用 Base::registry() 来获取对每个派生类包含一个元素的映射的引用。

关于c++ - 在 C++ 可执行文件中枚举派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10589779/

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