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分要高上不少。