我希望能够在一段时间内注册我的课程std::map
或向量,现在不要考虑重复等,
但我不想在类构造函数调用或类的任何函数内注册它,以某种方式在类外部进行注册,所以即使我从未实例化它,我也能够知道它存在。
Example:
// 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
以便更轻松地声明类的标头并调用将该特定类注册到列表中的内容
这可以完成还是我必须手动映射它?
// desirable:
#define CLASSREGISTER(myclass) makethemagic(##myclass); class myclass {
};
我知道,有了这个定义,我就不能使用继承等...我的观点是尝试举一个例子来说明我想以某种方式创建什么...
这是将类名称放入向量中的方法。如果我错过了重要细节,请发表评论。不过,我认为它不适用于模板。
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 的构造函数。
UPDATE:按照gf的建议,你可以这样写:
#define REGISTER_CLASS(cls) temp_##cls; static MyClasses myclass_##cls(#cls); class cls
class REGISTER_CLASS(XYZ) { int x, y, z; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)