用c++11 实现类名反射对象

由于最近工作中用到工厂模式来创建不同的窗口对象在主窗口中显示, 以前遇到类似的情况我都是把所有需要创建的窗口类头文件都包含到主窗口MainWnd.cpp中, 这样每新增一个窗口, 就需要修改 MainWnd.cpp 。MainWnd.cpp 也就需要重新编译。 后来百度了下c++反射, 有用Qt 元对象机制的(Qt继承自QObject 的类是可以支持反射的); 有用模版实现的类工厂, 然后需要反射的类从该类继承; 也有模仿MFC 的(需要在类的声明和实现中加入相关宏)... 感觉都有点麻烦。

后来再百度下有没有用 c++11, 或者 boost 实现的, 但好像没找到, 于是今天我闲着无聊就自己写一个基于C++11语法的类名反射。 最终成型后, 功能对于我来说已经满足。

用法是:

1> 在需要反射的类cpp 中调用宏 ReflectRegister 注册子类

2> 在策略函数中, 包含基类头文件, 然后根据子类的类名创建对象。

代码如下:

/*  @file ObjFactory.h
 *  @brief 根据子类名创建对象。可注册构造函数参数个数任意的类
 *
 *  用法:假设 BaseShape 有 2 个派生类: Rectangle 和 Triangle 。 3个类分别在不同的文件中
 *  , BaseShape 有个纯虚函数 virtual void draw() = 0;
 *  @code:
 *  // BaseShape.h
 *  class BaseShape
    {
    public:
        virtual void draw() = 0;
    };


    // Rectangle.cpp
    #inclu
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值