设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 8392|回复: 2
打印 上一主题 下一主题

实现用类名来动态创建类

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-30 23:44:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
突发奇想写了这个非常简单,但是很有用的东西:
需要 boost 库支持

文件名: Runtimeclass.hpp

#include <map>
#include <string>
#include <boost/function.hpp>
// Write by Jadedrip (Jadedrip@gmail.com)
#ifndef _TSTRDEFINED
     #define _TSTRDEFINED
     #ifdef _UNICODE
          #define tstring std::wstring
     #else
          #define tstring std::string
     #endif
#endif

class RuntimeClassFactory
{
private:
     typedef boost::function<void*()> RUNTIME_CREATE_REF;
protected:
     typedef std::map< tstring, RUNTIME_CREATE_REF > class_map;
     static class_map& cmap(){
          static class_map m_map;
          return m_map;
     }
public:
     static void register_class( tstring name, RUNTIME_CREATE_REF p ){
          (cmap())[name]=p;
     }
     static void* create( tstring name ){
          if( cmap().find( name )!=cmap().end() )
               return (cmap()[name])();
          else
               return NULL;
     }
};

template<typename T>
struct ClassObject
{
     ClassObject(const tstring class_name){ RuntimeClassFactory::register_class( class_name, &ClassObject<T>::create_object ); }
     static void* create_object(){ return new T; }
};

#define REGISTER_CLASS(X)       ClassObject<X> __class_help_##X(_T(#X));
#define REGISTER_CLASS_BY_NAME(X,CLASSNAME)          ClassObject<X> __class_help_##X(_T(CLASSNAME));

===================== 我是分隔线 ===============================
使用相当简单,定义好类以后, 在类定义的后面加上 REGISTER_CLASS(X) 然后就可以用
RuntimeClassFactory::create(_T("classname")); 来创建类了, 返回值是 void* 类型的指针。

比如

class A{
     ...
};
REGISTER_CLASS(A)

void main()
{
     tstring class_name=_T("A");
     A* a=(A*)RuntimeClassFactory::create(class_name);
}
2#
发表于 2009-12-3 19:05:07 | 只看该作者
顶你一下,好贴要顶!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 15:22 , Processed in 0.113799 second(s), 11 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表