实现只向指定可以转换的类才能进行转换
来源:互联网 发布:建筑设计需要什么软件 编辑:程序博客网 时间:2024/05/16 07:51
/************************* *文件名: ReflectClass.h*作者:Clark/陈泽丹 *时间: 20120726 *描述:反射类由于C++是编译型语言,目前还无法做到执行期的模版对象(不像脚本,可以在执行才确定对象)。所以使用时,转换目标还是需要硬编码。此类的功能在于转换类型的范围缩小。dynamic_cast;static_cast;这些是依据语法进行转换的。而本类是依据实际值进行转换(只有向实际生成的类型才可进行转换)。************************/ #pragma once#define DECLARE_REFLECT_CLASS virtual int GetClassID() const = 0;template<class _T_BASE, int _T_ID>struct UserClass: public _T_BASE{enum { ID = _T_ID, };virtual int GetClassID() const { return ID; }};template<class _T_DEST>class ToClass{public:template<class _BASS>_T_DEST* operator()(_BASS* _pBase) const{if( _pBase->GetClassID() == _T_DEST::ID)return (_T_DEST*)_pBase;return NULL;}template<class _BASS>const _T_DEST* operator()(const _BASS* _pBase) const{if( _pBase->GetClassID() == _T_DEST::ID)return (_T_DEST*)_pBase;return NULL;}};
#include <vld.h> #include <iostream> #include <assert.h>#include "ReflectClass.h"using namespace std;struct Base{DECLARE_REFLECT_CLASS;};struct A: public UserClass<Base, 1>{void show(){ cout<<"A"<<endl; }};struct B: public UserClass<Base, 2>{void show(){ cout<<"B"<<endl; }};template<int val>struct User;template<>struct User<3>: public UserClass<Base, 3>{void show(){ cout<<"UserClass3"<<endl; }};template<>struct User<4>: public UserClass<Base, 4>{void show(){ cout<<"UserClass4"<<endl; }};void main(){Base* pBase = new A();A* pA = ToClass<A>()(pBase);assert(NULL != pA);pA->show();delete pA;Base* pBase1 = new User<3>();User<3>* pU = ToClass< User<3> >()(pBase1);assert(NULL != pU);pU->show();delete pU;system("pause");}
- 实现只向指定可以转换的类才能进行转换
- 利用指定文件进行参考以进行单词的转换
- C#实现TreeView向XML的绝对转换类
- C#实现TreeView向XML的绝对转换类 .
- Java实现简体字向繁体字的转换
- 简单实现汉字向拼音的转换
- 获取系统时间,指定时间的星期,进行格式转换,数字转换为带,的
- linux下实现string向char*的转换
- linux下实现string向int的转换
- Qt5(Qt4应当也可以)中文的转换(只针对windows)
- C#实现TreeView向XML的绝对转换类的小修改
- VS2008向VS2005的转换
- TBuf8向TBufC的转换
- char向int的转换
- InputStream向String的转换
- 可以实现pdf转换成word的两种方法
- 可以实现pdf转换成txt格式的方法
- JAXB 可以实现Java对象与XML的相互转换
- 第一篇:Configuration-basic 之Spring对注解的处理【AnnotationConfigApplicationContext 】深度剖析
- IO流文件读操作
- linux 策略路由
- 通过MyEclipse部署到Tomcat的应用名称与工程名不相同的解决方法
- IO字符流缓冲区知识点分解与讲解
- 实现只向指定可以转换的类才能进行转换
- struts2工作原理图
- 栈的应用:数制转换
- vmware workstation8.0.3装苹果系统
- 甘特图版2012年伦敦奥运会赛程表
- 关于 如何实践kernel/driver/u-boot ,怎么样按照作者的思路实现自己的代码
- 1基于80x86的Linux的分段和分页机制
- 2Linux内存布局
- 声卡驱动