C++ Boost

Programming with Concepts 用概念編程

在建立一個泛型庫時,最困難(也是最重要)的可能就是決定如何將一組要求組成概念,以及決定每個算法使用哪些概念。在此過程中,我們有一個指導原則,稱為 requirement minimization principle最小要求原則

Requirement Minimization Principle最小要求原則: 最小化對一個組件的輸入參數的要求,以增加組件的可重用性。

這個原則有一定的難度。按照定義,組件必須使用輸入參數來完成它的工作(``組件''的意思是指函數模板或類模板)。那麼困難在於以什麼方法來實現組件才可以使得對輸入的假定最少(即最小要求)而又可以完成任務。

抽像的傳統觀念與最小要求的想法是有直接聯繫的。輸入越抽像,要求越少。因此,概念只不過是體現了C++模板編程中通用的抽像數據類型而已。

在為問題域設計概念時,重要的是要時刻緊記它們的意圖,亦即如何表達對組件的輸入的要求。至於最小要求原則,其實就是我們想要把概念最小化。

概念最小化是與問題域底層語義相關的一種表達。在基本容器的問題域中,對單向遍歷的要求就比對雙向遍歷的要求要小(這也正是 ForwardIterator前向迭代器BidirectionalIterator雙向迭代器 之間的差別)。語義的差別很容易就可以從帶有前向迭代器的具體數據結構與雙向迭代器的數據結構中看到。例如,單鏈接鏈表就是一種帶有前向迭代器的數據結 構,而不是雙向迭代器。此外,只需要前向迭代器即可實現的算法,與需要雙向迭代器的算法也很不相同。因此,將相似的要求歸納成定義精確的概念是很重要的。 例如,迭代器的要求就被歸納為六個STL迭代器概念(trivial平凡, output輸出, input輸入, forward前向, bidirectional雙向, 以及random access隨機訪問)。

Next: Implementation 實現
Prev: Concept Covering and Archetypes 概念的充分性和原型


Copyright © 2000 Jeremy Siek(jsiek@osl.iu.edu) Andrew Lumsdaine(lums@osl.iu.edu), 2007 David Abrahams.