1.定义

结合前面的内容,可以定义如下的基类

 1 class Object : public Memory
 2 {
 3     DECL_TPLT(Object);
 4     DECL_RTTI(Object);
 5 public:
 6     bool        isKindOf(me::Type type) const
 7     {
 8         return getType().isKindOf(type);
 9     }
10     bool        isExactKindOf(me::Type type) const
11     {
12         return getType().isExactKindOf(type);
13     }
14     const char*    getTypeName()const
15     {
16         return getType().getName();
17     }
18 };

定义继承类型

class DerivedObject : public me::Object
{DECL_TPLT(DerivedObject);DECL_RTTI(DerivedObject, Object);
};
template <typename T>
class TemplateObject : public DerivedObject
{DECL_TPLT(TemplateObject, T);DECL_RTTI(TemplateObject, DerivedObject);
};

2.使用

 1     DerivedObject* pdo1 = new DerivedObject();
 2     Object* po1 = pdo1->getType().newObject();
 3     if (pdo1->getType() == pdo1->getType()) {
 4         std::cout << "po1 is an instance of " << po1->getType().getName() << std::endl;
 5         DerivedObject* pdo2 = static_cast<DerivedObject*>(po1);
 6     }
 7     typedef TemplateObject<Object*> TObject;
 8     Type tobj = TObject::TypeId;
 9     std::cout << tobj.getName() << ":" << tobj.getHash() << std::endl;
10     Type btdobj = tobj.getBaseTypes()[0];
11     std::cout << btdobj.getName() << ":" << btdobj.getHash() << std::endl;
12     Type tbase = Object::TypeId;
13     if (tobj.isKindOf(tbase)) {
14         std::cout << tobj.getName() << " is kind of " << tbase.getName();
15     }
16     delete pdo1;

3.结果

转载于:https://www.cnblogs.com/goooon/p/5648378.html

Object与RTTI相关推荐

  1. 什么是java rtti_浅析Java RTTI 和 反射的概念

    一.概念 RTTI(Run-Time Type Identification,运行时类型识别)的含义就是在运行时识别一个对象的类型,其对应的类是Class对象,怎么理解这个Class对象呢?如果说类是 ...

  2. c++ RTTI(运行时类型识别)

    通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型.c++通过下面两个操作符提供RTTI. (1)typeid:返回指针或引用所指对象的实际类型. (2)dynamic_cast:将基类 ...

  3. Java RTTI与反射(参照Java编程思想与新浪博客)

    一.Java的RTTI  RTTI(Run-Time Type Identification,通过运行时类型识别)的含义就是在运行时识别一个对象的类型,其对应的类是Class对象,每个java里面的类 ...

  4. rtti是什么java_RTTI

    RTTI(Run-Time Type Identification),通过运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型. 中文名 运行时类型识别 外文名 Ru ...

  5. 「深入Java」类型信息:RTTI和反射

    1.RTTI Run-Time Type Infomation 运行时类型信息 为什么需要RTTI? 越是优秀的面向对象设计,越是强调高内聚低耦合,正如依赖倒转原则所说:"无论是高层模块还是 ...

  6. 模拟标准c++中的Rtti

    delphi C# Java都有自己的Rtti,只有C++,它只是个标准,iso中没有定义Rtti,只是各个厂商在自己的产品库中加入了自己的Rtti,但不通用.下面的代码来自网上,简单实现了一个工厂方 ...

  7. 用DELPHI的RTTI实现对象的XML持久化 【转】

    去年我花了很多时间尝试用DELPHI进行基于XML的WEB应用开发.起初的设想是很美好的,但结果做出来的东西很简陋.一部分原因就在于XML到Object之间的数据绑定实现太麻烦(另一部分是因为对XSL ...

  8. Object Pascal 中类型

    Object Pascal 中类型的一些注意 2010-04-16 14:15 --------------------------------------------------------- 原创 ...

  9. BCB中的RTTI机制

    BCB中的RTTI机制 RTTI在BCB中其实有两个意义.首先,针对一般标准的C++中所定义的,RTTI是所谓的Run-Time Type Identification的缩写.传统的程序语言中,所谓的 ...

最新文章

  1. WordPress 开启 Gzip 为网页加载提速减少响应时间
  2. 互联互通下的超级App价值重构
  3. HTTP and HTML
  4. ServletContextListener接口用法
  5. 【⌛工欲善其事,必先利其器⏳】葵花宝典の费曼学习法
  6. async 和 await的前世今生 (转载)
  7. [渗透测试]扫目录,Sqlmap利用均超时,利用dirb扫描
  8. JDK源码系列(5)-StringBuffer
  9. oracle 误删除数据,回退表数据
  10. linux 命令 —— cp
  11. 2019PHP最新简历
  12. 安徽二本大学计算机排名,2018安徽大学排名 安徽有哪些大学
  13. HP ProLiant DL380 G6内存错误导致WHEA-Logger 47报警的解决
  14. 手游模拟器征途辅助脚本开发
  15. c++ 智能指针 (std::weak_ptr)(三)
  16. mvc2 mvc_MVC之外的世界
  17. python中怎么打印出表格_Python 表格打印
  18. JavaScript 实现 标签页 切换效果
  19. 足球数据API接口 - 【球员资料】API调用示例代码
  20. PyCrypto安装和使用示例

热门文章

  1. 虚拟机7.1.4序列号
  2. 转载: 快速理解Docker - 容器级虚拟化解决方案
  3. java二叉树 最大值_leetcode刷题笔记-654. 最大二叉树(java实现)
  4. 压缩图片_Word快速压缩图片大小
  5. xp2003服务器怎么安装系统,UEFI里启动Windows XP/Server 2003 x86教程
  6. 个性化 服务器运行失败,VirtualBox 运行失败
  7. MySQL联合查询介绍
  8. MySQL非等值连接
  9. MySQL 高级 - 启动及登录MySQL
  10. RocketMQ中的Topic和JMS的queue有什么区别?