C++中怎么使用模板提高代碼的抽象水平

本篇內(nèi)容主要講解“C++中怎么使用模板提高代碼的抽象水平”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C++中怎么使用模板提高代碼的抽象水平”吧!

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、馬邊彝族ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的馬邊彝族網(wǎng)站制作公司

T.1:使用模板提高代碼的抽象水平

Reason(原因)

Generality. Reuse. Efficiency. Encourages consistent definition of user types.

普遍性。重用。效率。鼓勵用戶類型的一致性。

Example, bad(反面示例)

Conceptually, the following requirements are wrong because what we want of T is more than just the very low-level concepts of "can be incremented" or "can be added":

概念上,我們希望T不僅限于可以進(jìn)行增量操作或者可以作為被加數(shù)這樣非常低水平的概念,因此下面的需求是錯誤的。

template<typename T>
   // requires Incrementable<T>
T sum1(vector<T>& v, T s)
{
   for (auto x : v) s += x;
   return s;
}

template<typename T>
   // requires Simple_number<T>
T sum2(vector<T>& v, T s)
{
   for (auto x : v) s = s + x;
   return s;
}

Assuming that Incrementable does not  support+ and Simple_number does not support +=, we have overconstrained implementers of sum1 and sum2. And, in this case, missed an opportunity for a generalization.

假設(shè)Incrementable不支持+而且Simple_number不支持+=,我們過分約束了sum1和sum2的實(shí)現(xiàn)者。而且,在這種情況下,失去了泛化的機(jī)會。

Example(示例)

template<typename T>
   // requires Arithmetic<T>
T sum(vector<T>& v, T s)
{
   for (auto x : v) s += x;
   return s;
}

Assuming that Arithmetic requires both + and +=, we have constrained the user of sum to provide a complete arithmetic type. That is not a minimal requirement, but it gives the implementer of algorithms much needed freedom and ensures that any Arithmetic type can be used for a wide variety of algorithms.

假設(shè)算術(shù)運(yùn)算既需要+也需要+=,我們已經(jīng)要求sum的用戶提供完全的算術(shù)類型。這不是最小化的需求,但是它為算法的實(shí)現(xiàn)者提供了所需的更多自由,而且保證算術(shù)類型可以用于多種多樣的算法。

For additional generality and reusability, we could also use a more general Container or Range concept instead of committing to only one container, vector.

為了額外的泛用性和重用性,我們也可以使用更通用的容器或范圍概念代替特定的容器vector。

Note(注意)

If we define a template to require exactly the operations required for a single implementation of a single algorithm (e.g., requiring just += rather than also = and +) and only those, we have overconstrained maintainers. We aim to minimize requirements on template arguments, but the absolutely minimal requirements of an implementation is rarely a meaningful concept.

如果我們定義了一個(gè)要求用于特定算法的特定實(shí)現(xiàn)的操作的模板(例如只要求+=而不同時(shí)要求=和+)而且只要求這些,我們就過分約束維護(hù)者了。我們的目的在于最小化模板參數(shù)的需求,但是某一實(shí)現(xiàn)的絕對最小需求幾乎不會成為有意義的概念。

Note(注意)

Templates can be used to express essentially everything (they are Turing complete), but the aim of generic programming (as expressed using templates) is to efficiently generalize operations/algorithms over a set of types with similar semantic properties.

模板可以用于從本質(zhì)上表達(dá)任何東西(它們具備圖靈完備性),但是泛型編程的目的(像使用模板表達(dá)的那樣)是高效概括可以適用于具有相似語義屬性一套類型的操作/算法。

Note(注意)

The requires in the comments are uses of concepts. "Concepts" are defined in an ISO Technical Specification: concepts. Concepts are supported in GCC 6.1 and later. Consequently, we comment out uses of concepts in examples; that is, we use them as formalized comments only. If you use GCC 6.1 or later, you can uncomment them.

注釋中的需求是concept的用法?!癈oncepts”被定義在ISO技術(shù)規(guī)格中。GCC6.1之后的版本都支持Concepts。因此,在例子中我們注釋掉相關(guān)代碼;也就是說,我們只將它們用作標(biāo)準(zhǔn)注釋。如果你使用GCC6.1之后的版本,你可以去掉注釋符號。

Enforcement(實(shí)施建議)

  • Flag algorithms with "overly simple" requirements, such as direct use of specific operators without a concept.

  • 標(biāo)記需求過于簡單的算法,例如不用concept而直接使用特定操作符。

  • Do not flag the definition of the "overly simple" concepts themselves; they may simply be building blocks for more useful concepts.

  • 不要標(biāo)記定義過于簡單的concept本身;它們沒準(zhǔn)只是作為某個(gè)更有用的concept的一部分存在的。

到此,相信大家對“C++中怎么使用模板提高代碼的抽象水平”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

新聞名稱:C++中怎么使用模板提高代碼的抽象水平
文章轉(zhuǎn)載:http://muchs.cn/article28/iioicp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器自適應(yīng)網(wǎng)站、定制開發(fā)標(biāo)簽優(yōu)化、網(wǎng)站內(nèi)鏈、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管