【C++】【反射机制】

官方定义

反射是程序可以访问、检测和修改它本身状态或行为的一种能力。

C++本身并不支持反射机制,可手动通过Map实现。

实际需求

通过类名字符串如“ClassA”生成对应的类对象,并获取类中声明的成员变量和方法,Unreal中蓝图访问C++中类方法即是使用了C++反射机制。

实现思路

为需要反射的类创建类对象的回调函数,在Map中以类名字符串为Key,类对象回调函数为Value,实现绑定。

具体实现

//定义一个函数指针类型,用于指向创建类实例的回调函数
typedef void* (*PTRCreateObject)(void); 

//工厂类的定义

class ClassFactory{
private:  
    map<string, PTRCreateObject> m_classMap ;  
    ClassFactory(){}; //构造函数私有化

public:   
    void* getClassByName(string className);  
    void registClass(string name, PTRCreateObject method) ;  
    static ClassFactory& getInstance() ;  
};

//工厂类的实现

//@brief:获取工厂类的单个实例对象  
ClassFactory& ClassFactory::getInstance(){
    static ClassFactory sLo_factory;  
    return sLo_factory ;  
}  

//@brief:通过类名称字符串获取类的实例
void* ClassFactory::getClassByName(string className){  
    map<string, PTRCreateObject>::const_iterator iter;  
    iter = m_classMap.find(className) ;  
    if ( iter == m_classMap.end() )  
        return NULL ;  
    else  
        return iter->second() ;  
}  

//@brief:将给定的类名称字符串和对应的创建类对象的函数保存到map中   
void ClassFactory::registClass(string name, PTRCreateObject method){  
    m_classMap.insert(pair<string, PTRCreateObject>(name, method)) ;  
}

未完待续...

https://blog.csdn.net/scythe666/article/details/51718864

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值