java动态类名_c++ 模拟java的反射,根据类名动态创建类

参考:

原先有静态变量依赖问题,

参考这个,又做了改进:

classfactory.h文件

#ifndef CLASSFACTORY_H#define CLASSFACTORY_H#include #include using namespace std;#include "boardbase.h"typedef void* (*register_func)();class Class{public:static void* newInstance(const string& class_name) {map::iterator it = constructors().find(class_name);if (it == constructors().end())return NULL;elsereturn it->second();}static void registerClass(const string& class_name, register_func func) {constructors()[class_name] = func;}private://避免static初始化顺序问题导致崩溃static map& constructors(){/* key is class name and value is function to create instance of class */static map m_register;return m_register;}};class ClassFactory{public:static BoardBase* createBoardBase(const string& bank_name) {return (BoardBase*)Class::newInstance(bank_name);}};class Register{public:Register(const string& class_name, register_func func) {Class::registerClass(class_name, func);}};//在cpp文件中使用#define REGISTER_CLASS(class_name) \class class_name##Register { \public: \static void* newInstance() { \return new class_name; \} \private: \static Register reg; \};\Register class_name##Register::reg(#class_name,class_name##Register::newInstance);#endif // CLASSFACTORY_H

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值