請使用traits classes表現型別資訊。
traits classes使得型別相關資訊在編譯期可用。他們以template以及templates 特化完成實現。
整合過載技術後,traits classes有可能在編譯期對型別執行if..else...測試.
以標準庫中的迭代器為例:
首先根據迭代器的型別為迭代器提供卷標分類。
struct input_iterator_tag{};
struct output_iterator_tag{};
struct forward_iterator_tag:public input_iterator_tag{};
struct bidirectional_iterator_tag:public forward_iterator_tag {};
struct random_access_iterator:public bidirectional_tag{};
這種技術手法要求每乙個使用者自定義型別必須巢狀乙個typedef名為iterator_category.用來確定適當的卷標結構。
例如
template<...>
class deque
}templatestruct iterator_traits
//針對指標型別進行特化
templatestruct iterator_traits
利用函式的過載完成if else測試
template
void doadvance(itert& iter,distt d,std::random_access_iterator_tag)
template
void doadvance(itert& iter,distt d,std::input_iterator_tag)
一百四十七
一,概念介紹 外觀模式 facade 他隱藏了系統的複雜性,並向客戶端提供了乙個可以訪問系統的介面。這種型別的設計模式屬於結構性模式。為子系統中的一組介面提供了乙個統一的訪問介面,這個介面使得子系統更容易被訪問或者使用。二,實現 直接上 吧,邊看 遍理解概念,我覺得這樣效果也不錯,第一步 先定義系統...
effective C 條款四十二解讀
了解typename的雙重意義 1.template 與template 沒有區別。typename 的另一種用法,我們以乙個 來解釋 templatevoid print2nd const c container if container.size 2 c const iterator iter ...
愛情四十七課,別拿愛解恨
我們都有一股 毀壞 的力量,在情緒衝動的時候,會不管不顧的抓過自己最在意的東西 使勁摔下去 雪莉和男友爆吵了一架之後分了手。其實只是一件小事情,男友去幫前女友搬家,因為她實在找不到認識的人。本來這件事,幾句話就可以解釋清楚,可是雪莉被醋意和疑心沖昏了頭,罵了男友一句 不要臉的混蛋 男友也急了,然後就...