将任意类型映射到一个唯一整数(C++模板实现TypeList)
2014-01-12 00:00
671 查看
template <class Prev, class This> class TypeList { public: enum { position = (Prev::position) + 1, }; }; template <> class TypeList<void, void> { public: enum { position = 0, }; }; #include <iostream> int main() { typedef TypeList< void, void> base; // base typedef TypeList< base, double> t2; // position is unique id for double typedef TypeList< t2, char > t3; // position is unique id for char std::cout << "T1 Posn: " << base::position << std::endl; std::cout << "T2 Posn: " << t2::position << std::endl; std::cout << "T3 Posn: " << t3::position << std::endl; }
确实是非常巧妙的方法。这个方法在Andrei Alexandrescu的《Modern C++ Design》上有详细说明。
这本书在豆瓣上的评分高达9.0,虽然比不上《The C Programming Language》的9.5,但却比Herb Sutter的《Exceptional C++》的8.5分要高上不少。
相关文章推荐
- 定义一个List集合并实例化对应的实现类对象。循环输入任意个整数,输入0结束输入循环,对集合中的数据进行从大到小的排序后输出
- C++ 使用模板实现一个List的实例
- C++ 使用模板实现的一个List
- [C++模板技术] 整数映射为类型
- C/C++语言的点滴(一) -- 实现两个任意类型的数据的交换
- 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
- c/c++整理--实现任意长度正整数相加
- C++之模板实现list
- 【c++模板】模拟实现有模板的双向链表(List)(声明和定义分离)
- C++中sprintf实现将一个基本数据类型的数组转换成字符串
- 用模板template<typename T>实现int double等类型转string
- C++使用模板类实现任意类型switch和变量case
- C++通过ostringstream实现任意类型转string
- C++利用模板实现一个队列
- C++ std::list实现大整数加法运算
- c++任意类型Any类的实现
- C++实现输入一个整数,将各位数字反转后输出
- 任意进制整数之间的相互转换(C++实现)
- 用模板template<typename T>实现int double等类型转string
- 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出