gpt4 book ai didi

c++ - 以某种方式在列表中注册我的类(class)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:29:34 24 4
gpt4 key购买 nike

我希望能够在 std::map 或 vector 中注册我的类,暂时不要考虑重复等问题,但我不想在类构造函数调用或类的任何内部函数中注册它,而是在类之外以某种方式进行注册,因此即使我从未实例化它,我也能够知道它存在。

例子:

// Somehow, from outside the myclass, in a scope that will be called
//in the begining of the proccess, add "MyClass1" to a
//list so it can be instanciated later
class MyClass1{

}

然后我会为它制作一个#define,或者如果可以的话,制作一个模板。
我不知道我是否让自己清楚(再次)...我的意思是我需要知道我拥有的每个类,而不必调用每个类。
我的想法是创建一个 #define 以便更容易地声明类的 header 并调用将特定类注册到列表中的东西

这可以完成还是我必须手动映射?

// desirable:
#define CLASSREGISTER(myclass) makethemagic(##myclass); class myclass {
};

我知道,有了那个定义,我不能使用继承等...我的意思是尝试举例说明我想以某种方式创建的内容...

最佳答案

这是将类名放入 vector 中的方法。如果我错过了重要的细节,请发表评论。不过,我认为它不适用于模板。

struct MyClasses {
static vector<string> myclasses;
MyClasses(string name) { myclasses.push_back(name); }
};

#define REGISTER_CLASS(cls) static MyClasses myclass_##cls(#cls);

struct XYZ {
};

REGISTER_CLASS(XYZ);

这里的技巧是在调用 main() 之前进行一些计算,您可以通过全局初始化来实现。 REGISTER_CLASS(cls) 实际上生成代码在程序启动时调用 MyClasses 的构造函数。

更新:按照 gf 的建议,您可以这样写:

#define REGISTER_CLASS(cls) temp_##cls; static MyClasses myclass_##cls(#cls); class cls
class REGISTER_CLASS(XYZ) { int x, y, z; }

关于c++ - 以某种方式在列表中注册我的类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1691473/

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