作者:
rockeet
发表日期:
2019年12月23日
分类:
C++
评论:
0 条
阅读次数: 4,558 次
1. 概述
简而言之,编程语言中的反射(Reflection)指的是从运行时中获取语言本身的类型等信息。C++ 缺乏这样的机制,对于最简单的 enum 类型,我们或许可以实现带有反射功能的 enum。
我们实现了几个宏,通过宏定义的 enum,就自动地拥有反射功能。
2. 用法
2.2 宏定义
|
// 可在任意 namespace 中调用,不可在 struct/class 内调用 #define TERARK_ENUM_PLAIN(EnumType, IntRep, ...) details... #define TERARK_ENUM_CLASS(EnumType, IntRep, ...) details... // 可在 struct/class 内调用,不可在任意 namespace 中调用 #define TERARK_ENUM_PLAIN_INCLASS(EnumType, IntRep, ...) details... #define TERARK_ENUM_CLASS_INCLASS(EnumType, IntRep, ...) details... |
继续阅读 →
作者:
rockeet
发表日期:
2014年08月26日
分类:
C++
评论:
0 条
阅读次数: 5,036 次
nark C++ 序列化库 尽管 性能优异,但是C++14以前,在某些情况下想要完全发挥性能优势,需要额外声明 DATA_IO_DUMP_RAW_MEM。
只是因为受制于 C++ 的语法限制,无法实现自动推导所有的 Dumpable 对象——可以 memcpy 的对象: 继续阅读 →
前段时间实现了基于 Succinct Data Structure 的自动机,这种自动机(内存)存储方式将状态转移的 label 单独存储起来,从而,查找 label 就是一个在 byte 数组中查找 byte 的操作,并且,绝大多数情况下,需要查找的这个 byte 数组都非常短(状态的平均转移(label)数一般情况下大约是 2 )。 继续阅读 →
作者:
rockeet
发表日期:
2014年03月11日
分类:
C++
评论:
0 条
阅读次数: 2,766 次
也就是 C++ 函数名字的两阶段查找,模板实例化之前和实例化之后。
C++每个类对象都有一个名字空间,而非类对象,比如 int, char, long, char*….,没有关联的名字空间。 继续阅读 →
昨天一个朋友 checkout 了我的 febird 代码,编译时出现了一个诡异的错误。经过仔细勘察,他的 g++ 版本是 4.7.3,而我测试过的 g++4.7.2,g++4.8.2均无问题。 继续阅读 →
刚才开始用 boost::range,就查看了了一下 boost 源码,发现 boost-1.50 一个 bug,觉得应该在新版中已经修改了,下载了最新的 1.54 版,进去一看,bug 仍然在! 继续阅读 →
之前我有一篇文章《 C++中让对象的拷贝成为 显式 的》,使用类似的技巧,可以避免字符串加法中的临时对象,也许是因为惰性,这个想法一直没有诉诸实现,今天有空把它写了出来。 继续阅读 →
用在 onfly minimal acyclic DFA construction 上,速度提高了大约28%,内存对每个State节约了4个字节。
以后有空再努力一下,把 gold_hash_idx 再深入泛化一步,做成可以更方便地用于 multi_index 。
目前的gold_hash_map 实现中,index和data是耦合在一起的。
今天在思考 onfly MinADFA 的进一步优化时,想到了一点:在MinADFA_onfly 中,equivalence_register是一个gold_hash_tab, 继续阅读 →
Version 1.51.0
New Libraries: Context 继续阅读 →