原来C++ 0x已经成为国际标准了。经过多年的努力,这个28岁的家伙又上升了一个层次。而28岁的我呢...
//重新学习C++
最近静下心来,阅读Modern C++ Design: Generic Programming and Design Patterns Applied。学习编程关键在于实践:光看书似懂非懂,动手才发现一点都不懂。还是老老实实敲例子,编译运行一下才真正有所收获。
本文的内容是与类型相关的一些编译期设计手法:把常数视同类型(Int2Type),类型对类型的映射(Type2Type),类型选择(TypeSelect)。
一.Int2Type
用途:把不同整数映射成不同的“空”类型,配合函数重载实现编译期的“分支选择”
//重新学习C++
最近静下心来,阅读Modern C++ Design: Generic Programming and Design Patterns Applied。学习编程关键在于实践:光看书似懂非懂,动手才发现一点都不懂。还是老老实实敲例子,编译运行一下才真正有所收获。
本文的内容是与类型相关的一些编译期设计手法:把常数视同类型(Int2Type),类型对类型的映射(Type2Type),类型选择(TypeSelect)。
一.Int2Type
用途:把不同整数映射成不同的“空”类型,配合函数重载实现编译期的“分支选择”
//类型Int2Type<某整型>
template <int v>
struct Int2Type
{
enum { value = v };
};
//辅助类:某基类和其派生类,提供一个Clone()接口
struct TestBase
{
virtual TestBase * Clone(void) const
{
return new TestBase(*this);
}
};
class TestDerive : public TestBase
{
public:
virtual TestBase * Clone(void) const
{
return new TestDerive(*this);
}