2.8
type_info的一个外覆类(Wrapper)
因为std::type_info类不太好用,作者提供的Loki库对其包装了一下,这节对其进行介绍,省去。
2.9
NullType 和 EmptyType
Loki定义了两个非常简单的型别:NullType 和
EmptyType。可以作为型别计算的边界。
1 class NullType; //没有定义
2 class EmptyType{};
第3章会展示其用途。
2.10
Type Traits
Traits
是一种“可于编译期根据型别作判断”的泛型技术,很想你在执行期根据数值进行判断一样。假设你想实作
Copying算法:
1 template <typename InIt, typename OutIt>
2 OutIt Copy(InIt first, InIt last, OutIt result)
3 {
4 for(; fist!=last; ++first, ++result)
5 *result = *first;
6 }
另外假设你有一个针对硬件优化的非常快的内建函数,你希望尽可能发挥改函数的好处。
1 void BitBlast(const void* src, void* dest, size_t bytes);
这是一个只针对基本型别并有着简朴旧式结构的实作,你不能将它用于拥有“nontrivial copy构造函数”的型别上。你可能需要对型别判断,以判断是否可以利用BitBlast,以便对基本型别快速执行。
你需要判断:
1、InIt 和 OutIt是一般指针吗?(针对iterator迭代器而言)
2、InIt 和 OutIt所指的型别可以bitwise copy(位逐一拷贝)吗?
Type
traits 有助于解决这样的问题。