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 有助于解決這樣的問題。