c++反射机制的实现(完整代码,相当靠谱)
来源:互联网 发布:mac bt下载工具 编辑:程序博客网 时间:2024/05/22 04:32
下面是c++反射机制的一个实现,比较完整。出自:http://www.oschina.net/code/snippet_230828_9913
虽然这是windows下写的代码,但是比较合理,非人云亦云,很靠谱。我昨天说过实现一个优秀的c++反射机制,一定要和动态链接库扯上关系(个人认为)。
下面这篇文章,虽然没有扯上动态链接库,但是也是相当不错的了。关于我个人认为的c++反射机制完整优秀版本,以后我再推出分享。
代码片段(3)[全屏查看所有代码]
1. [文件] DynBase.cpp ~ 781B 下载(66)
01
#include "StdAfx.h"
02
#include <map>
03
#include "DynBase.h"
04
05
static
std::map< string,ClassInfo*> *classInfoMap = NULL;
06
using
namespace
std;
07
IMPLEMENT_CLASS(Object)
08
bool
Object::Register(ClassInfo* ci)
09
{
10
if
(!classInfoMap) {
11
classInfoMap =
new
std::map< string,ClassInfo*>();
12
}
13
if
(ci) {
14
if
(classInfoMap->find(ci->m_className) == classInfoMap->end()){
15
classInfoMap->insert(std::map< string,ClassInfo*>::value_type(ci->m_className,ci));
16
}
17
}
18
return
true
;
19
}
20
Object* Object::CreateObject(std::string name)
21
{
22
std::map< string,ClassInfo*>::const_iterator iter = classInfoMap->find(name);
23
if
(classInfoMap->end() != iter) {
24
return
iter->second->CreateObject();
25
}
26
return
NULL;
27
}
28
29
bool
Register(ClassInfo* ci)
30
{
31
return
Object::Register(ci);
32
}
2. [文件] DynBase.h ~ 1KB 下载(68)
01
#ifndef __DYNBASE_H__
02
#define __DYNBASE_H__
03
#include <string>
04
05
class
Object;
06
class
ClassInfo;
07
08
typedef
Object* (*ObjectConstructorFn)(
void
);
09
bool
Register(ClassInfo* ci);
10
using
namespace
std;
11
12
class
ClassInfo
13
{
14
public
:
15
ClassInfo(
const
std::string className,ObjectConstructorFn ctor)
16
:m_className(className) ,m_objectConstructor(ctor)
17
{
18
Register(
this
);
19
}
20
virtual
~ClassInfo(){}
21
Object* CreateObject()
const
{
return
m_objectConstructor ? (*m_objectConstructor)() : 0; }
22
bool
IsDynamic()
const
{
return
NULL != m_objectConstructor;}
23
const
std::string GetClassName()
const
{
return
m_className;}
24
ObjectConstructorFn GetConstructor()
const
{
return
m_objectConstructor;}
25
public
:
26
string m_className;
27
ObjectConstructorFn m_objectConstructor;
28
};
29
30
#define DECLARE_CLASS(name) \
31
protected
: \
32
static
ClassInfo ms_classinfo; \
33
public
: \
34
virtual
ClassInfo* GetClassInfo()
const
; \
35
static
Object* CreateObject();
36
37
#define IMPLEMENT_CLASS_COMMON(name,func) \
38
ClassInfo name::ms_classinfo((#name), \
39
(ObjectConstructorFn) func); \
40
\
41
ClassInfo *name::GetClassInfo()
const
\
42
{
return
&name::ms_classinfo;}
43
44
#define IMPLEMENT_CLASS(name) \
45
IMPLEMENT_CLASS_COMMON(name,name::CreateObject) \
46
Object* name::CreateObject() \
47
{
return
new
name;}
48
49
50
class
Object
51
{
52
DECLARE_CLASS(Object)
53
public
:
54
Object(){}
55
virtual
~Object(){}
56
static
bool
Register(ClassInfo* ci);
57
static
Object* CreateObject(string name);
58
};
59
60
61
#endif
3. [文件] test.cpp ~ 579B 下载(61) 跳至 [1] [2] [3] [全屏预览]
01
#include<iostream>
02
#include<cstring>
03
#include "DynBase.h"
04
using
namespace
std;
05
06
class
A :
public
Object
07
{
08
DECLARE_CLASS(A)
09
public
:
10
A(){cout<<hex<<(
long
)
this
<<
" A constructor!"
<<endl;}
11
~A(){cout<<hex<<(
long
)
this
<<
" A destructor!"
<<endl;}
12
};
13
IMPLEMENT_CLASS(A)
14
15
class
B :
public
Object
16
{
17
DECLARE_CLASS(B)
18
public
:
19
B(){cout<<hex<<(
long
)
this
<<
" B constructor!"
<<endl;}
20
~B(){cout<<hex<<(
long
)
this
<<
" B destructor!"
<<endl;}
21
};
22
IMPLEMENT_CLASS(B)
23
24
int
main()
25
{
26
Object* p = Object::CreateObject(
"A"
);
27
delete
p;
28
system
(
"pause"
);
29
return
0;
30
}
- c++反射机制的实现(完整代码,相当靠谱)
- 红黑树的C实现完整代码
- 反射机制的实现
- jquery实现比较靠谱的手风琴代码
- PHP 反射机制实现动态代理的代码
- PHP反射机制实现动态代理的代码
- 这样的职业理想相当靠谱:成为数据分析师
- 这样的职业理想相当靠谱:成为数据分析师(Z)
- Java反射机制-简单案例实现(代码篇)
- 一个相当不错的地区代码级联实现
- KMP算法实现字符串的模式匹配完整C代码
- 利用栈实现二进制转换十六进制的完整C代码
- 拓扑排序算法原理以及完整的C代码实现
- 二叉排序树的构造,插入,删除,完整c代码实现
- 一个相当完整的build.xml
- C++反射机制的实现
- C++反射机制的实现
- 反射机制的实现demo
- hadoop学习问题记录
- 子查询
- ]把刽子手曾国藩吹捧为中兴名臣意在何为
- c++程序设计原理与实践---(2)错误?错误!
- “十天一本书”之八——《思路决定出路》与马云卸任的一点感想
- c++反射机制的实现(完整代码,相当靠谱)
- 马云:信任让我成功 让我有了今天(演讲全文)
- 从image/x-png谈文件上传中的ContentType属性
- java中的内部类总结
- C++多重继承汇编分析
- C++:使用const报告链接错误
- EditPlus注册码在线生成
- linux下的僵尸进程处理办法
- 网易面试笔记