[原] RTTI 为什么type_info 有比较操作
The lifetime of the object returned by
typeidextends to the end of the program.
根据C++标准, typeid()返回的type_info对象的生命周期那么长, 那么能不能通过直接比较指针来判断类型一致? 例如 std::map<const std::type_info*, ...>
但是type_info又带了自己的比较操作, 例如==, !=, before(), 显然这些可以用来排序和查找.那么直接比较指针不行吗?
因为blade的data-binding使用了C++的RTTI, 顺便考虑了下这个问题. 原来type_info对象虽然一直有效, 但是并不能保证唯一:
也就是说不同的dll/so里面产生的对象是不一样的, 所以直接比较指针不行. 不过可以通过type_info自带的比较操作得出顺序和相等与否.
struct type_info_less
{
bool operator()(const std::type_info* lhs, const std::type_info* rhs)
{
return lhs->before(*rhs);
}
}
typedef std::map<const std::type_info*, T, type_info_less> info_map;
虽然说before()是implementation-specific的类型顺序, 但是对于同一个程序, 在runtime应该是一致的. 除非用了两个不同的编译器,再链接? 这种情况下通常之用C做接口(extern "C"), 不会用C++, 即便用了往往链接不了.
所以说可以拿before来排序, 因为只是排序用于查找, 所以typeid(int)和typeid(char)到底那个在前, 这并不重要.
[原] RTTI 为什么type_info 有比较操作的更多相关文章
- 使用AtomicInteger原子类代替i++线程安全操作
Java中自增自减操作不具原子性,在多线程环境下是线程不安全的,可以使用使用AtomicInteger原子类代替i++,i--操作完成多线程线程安全操作. 下面是等于i++多线程的自增操作代码: pu ...
- JDK原子类操作
JDK原子类操作及原理 在JDK5之后,JDK提供了对变量的原子类操作, java.util.concurrent.atomic里都是原子类 原子类的分类 原子更新基本类型 原子更新数组 原子更新抽象 ...
- C++复习8.异常处理和RTTI
C++异常处理和RTTI技术 20130930 1.异常处理的基本知识 C语言中是没有内置运行时错误处理机制,对于错误发生的时候使用的几种处理机制: 函数返回彼此协商后统一定义的状态编码来表示操作成功 ...
- winform里操作打开在panel里的form窗体,子窗体操作同级子窗体或者父窗体的方法
最近开始了一个winform项目,原先一直都是web项目.遇到个问题,就是在框架内,左侧和中间的main都是用panel来实现的form,就是把form窗体打开到panel里,实现左侧是导航,中间是操 ...
- C#操作Word的辅助类(word2003) 修改完善版
转自:http://blog.csdn.net/jiutao_tang/article/details/6567608 该类在他人编写的几个类基础上扩展完善而来,主要功能有: (1)插入文本 (2)插 ...
- opencv笔记4:模板运算和常见滤波操作
time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...
- tr 命令 操作字符串中字符 删除替换 等
ip=$(cat ${path}initOauth/initinfo.txt |awk '{if(NR==1)print $0;}'|tr -d '\r'); tr命令可以对来自标准输入的字符进行替换 ...
- JQuery操作元素的属性与样式及位置 复制代码
<script type="text/javascript" src="JQuery/jquery-1.5.1.js"></script> ...
- JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象
前 言 絮叨絮叨 这里是JS基础知识集中讲解的第三篇,也是最后一篇,三篇JS的基础,大多是知识的罗列,并没有涉及更难得东西,干货满满!看完这一篇后,相信许多正在像我一样正处于初级阶段的同学, ...
随机推荐
- Shadow Properties之美(一)【Microsoft Entity Framework Core随笔】
最近在做公司的项目的时候,开始把部分程序迁移到EF Core,然后有了一些感触,趁着还没忘却,还是先记录下来. EF Core还在成长中,我写这个的时候,版本是2.2.如果对着已有的EF 5/6来说, ...
- C# 索引和长度必须引用该字符串内的位置 LENGTH
今天遇到了 索引和长度必须引用该字符串内的位置 的问题. 原因是实用 Substring 对字符串进行了前五位的截取,但是忽略了字符串本身不足五位的情况. 如果不足五位,直接将整个字符串赋值过来,添加 ...
- js获取元素属性值为空的原因和解决办法
问题描述:js获取某元素的属性值为空 代码: <!-- css定义在head中 --> <style> #box{ width: 100px; height: 100px; b ...
- 怎样将virtualbox中的虚拟系统安装到c盘以外的盘
首先在安装的时候是可以选择虚拟机文件的位置的,如果当时没注意,只能现在移动一下了,很简单 首先将 C:/Users目录下的.VirtualBox和VirtualBox VMs两个文件拷贝到你愿意放的位 ...
- IP通信基础原理课堂笔记----HCL(1)
PC端配置:打开接口,配置ip地址 交换机配置:①创建VLAN system-view vlan 10 vlan 20 ②配置PC端接口 interface gi 1/0/1 port link-ty ...
- io 的一些简单说明及使用
io 流简述: i->inputStream(输入流) o->outputStream (输出流) IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间的数据传输, ...
- mac 下mysql安装
系统环境: OS X Yosemite 10.10.3 登录用户: fx (有 sudo 权限) MySQL版本: 5.5.49 (mysql-5.5.49-osx10.9-x86_64.tar) M ...
- BUAAOO P1-P3 Expression Dirivation
目录 1.问题描述 1.1.概念定义 7.程序度量 8.知识点笔记 1.运行 2.1.方法 2.2.检测相等性 2.3.空串与null串 2.4.使用StringBuilder构建字符串 2.5.使用 ...
- python day32--struct,文件上传下载
一.struct模块 可以把要发送的数据长度转换成固定长度的字节 struct.pack('i',数据长度) struct.unpack('i',数据长度) 二.上传下载文件作业 server imp ...
- 2018-计算机系机试(第二批)-C-数字字符个数
C. 数字字符个数 单点时限: 1.0 sec 内存限制: 256 MB 输入一行信息,输出其中包含的数字字符个数. 例如:输入 a<4 >w,输出 1 . 输入格式 一行字符串 (可能含 ...