2.8
type_info的一個外覆類(Wrapper)
因為std::type_info類不太好用,作者提供的Loki庫對其包裝了一下,這節(jié)對其進行介紹,省去。
2.9
NullType 和 EmptyType
Loki定義了兩個非常簡單的型別:NullType 和
EmptyType。可以作為型別計算的邊界。
1 class NullType; //沒有定義
2 class EmptyType{};
第3章會展示其用途。
2.10
Type Traits
Traits
是一種“可于編譯期根據(jù)型別作判斷”的泛型技術(shù),很想你在執(zhí)行期根據(jù)數(shù)值進行判斷一樣。假設(shè)你想實作
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 }
另外假設(shè)你有一個針對硬件優(yōu)化的非常快的內(nèi)建函數(shù),你希望盡可能發(fā)揮改函數(shù)的好處。
1 void BitBlast(const void* src, void* dest, size_t bytes);
這是一個只針對基本型別并有著簡樸舊式結(jié)構(gòu)的實作,你不能將它用于擁有“nontrivial copy構(gòu)造函數(shù)”的型別上。你可能需要對型別判斷,以判斷是否可以利用BitBlast,以便對基本型別快速執(zhí)行。
你需要判斷:
1、InIt 和 OutIt是一般指針嗎?(針對iterator迭代器而言)
2、InIt 和 OutIt所指的型別可以bitwise copy(位逐一拷貝)嗎?
Type
traits 有助于解決這樣的問題。