這篇文章主要講解了“C++怎么避免互補(bǔ)性約束”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C++怎么避免互補(bǔ)性約束”吧!
專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)平桂免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
T.25:避免互補(bǔ)約束
Clarity. Maintainability. Functions with complementary requirements expressed using negation are brittle.
清晰性??删S護(hù)性。包含互補(bǔ)的,使用否定方式表達(dá)的需求的函數(shù)是脆弱的。
Example (using TS concepts)(示例(使用TS概念))
Initially, people will try to define functions with complementary requirements:
最開始,人們?cè)噲D用互補(bǔ)需求定義函數(shù):
template<typename T>
requires !C<T> // bad
void f();
template<typename T>
requires C<T>
void f();
This is better:
下面的代碼更好:
template<typename T> // general template
void f();
template<typename T> // specialization by concept
requires C<T>
void f();
The compiler will choose the unconstrained template only when C<T> is unsatisfied. If you do not want to (or cannot) define an unconstrained version of f(), then delete it.
只有在C<T>不能滿足時(shí),編譯器才會(huì)選擇非約束模板。如果你不想(或不能)定于f()的非約束性版本,刪除它。
template<typename T>
void f() = delete;
The compiler will select the overload and emit an appropriate error.
編譯器會(huì)選擇重載重載并報(bào)出適當(dāng)?shù)腻e(cuò)誤。
Note(注意)
Complementary constraints are unfortunately common in enable_if code:
很不幸,互補(bǔ)的約束在enable_if代碼中很常見:
template<typename T>
enable_if<!C<T>, void> // bad
f();
template<typename T>
enable_if<C<T>, void>
f();
Complementary requirements on one requirements is sometimes (wrongly) considered manageable. However, for two or more requirements the number of definitions needs can go up exponentially (2,4,8,16,...):
一個(gè)需求上的互補(bǔ)需求有時(shí)(被錯(cuò)誤地)認(rèn)為是可控的。然而,對(duì)于兩個(gè)或更多的需求,定義的數(shù)目需要可以按照指數(shù)方式增長(zhǎng)。
C1<T> && C2<T>
!C1<T> && C2<T>
C1<T> && !C2<T>
!C1<T> && !C2<T>
Now the opportunities for errors multiply.
現(xiàn)在錯(cuò)誤的可能性也倍增了。
Enforcement(實(shí)施建議)
Flag pairs of functions with C<T> and !C<T> constraints
標(biāo)記使用C<T> 和!C<T> 約束的函數(shù)對(duì)。
感謝各位的閱讀,以上就是“C++怎么避免互補(bǔ)性約束”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)C++怎么避免互補(bǔ)性約束這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
分享文章:C++怎么避免互補(bǔ)性約束
地址分享:http://aaarwkj.com/article40/pdiseo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站收錄、用戶體驗(yàn)、網(wǎng)頁(yè)設(shè)計(jì)公司、做網(wǎng)站、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)