反射机制:程序能够控制和调整自己的行为。对于我们最常见的反射机制就是通过输入获取对应的实例。
举个例子我们有两个类:
clas A:public Base {
public:
A(){};
};
class B:public Base {
public:
B(){};
};
我们输入 A 的时候要能够得到一个A的实例。办法有很多在此例子中你甚至可以用switch case来实现。
但是我们最长见的手段就是用一个map进行类实例的存储:
std::map<std::string, Base*> instanceMap;
在程序初始化的时候建立好instanceMap 然后在用的时候进行instanceMap.find("A") 来获取对应实例。
如果有这种情况就是:instanceMap需要在主程序执行前就初始化好,而且初始化的工作不能进行集中,也就是说
不能通过循环方式将各个类实例插入该map,因为类太多,而且类的增长很快这段代码会相对难以维护。
于是我们就想到一个办法就是在类源文件的类定义最后加一个宏来进行类实例的注册。这样类的开发者只需要少量的工作就能
实现自己新编写的类的注册工作。而且注册工作会在主函数执行前完成。
宏可以如下方式:
class C:public base {