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