C++ 如何用宏实现反射机制

本文介绍了如何在C++中使用宏实现反射机制,通过宏定义在类定义后面自动注册类实例到映射中,以便在程序运行时根据字符串获取对应的类实例。这种方法使得类的注册工作在主函数执行前自动完成,简化了维护。
摘要由CSDN通过智能技术生成

反射机制:程序能够控制和调整自己的行为。对于我们最常见的反射机制就是通过输入获取对应的实例。

举个例子我们有两个类:

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 {

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值