真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++接口類(lèi)型怎么定義

本篇內(nèi)容介紹了“C++接口類(lèi)型怎么定義”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)站空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、遂寧網(wǎng)站維護(hù)、網(wǎng)站推廣。

I.4 Make interfaces precisely and strongly typed(接口類(lèi)型應(yīng)該精準(zhǔn)且嚴(yán)格)

Reason(原因)

類(lèi)型是最簡(jiǎn)單、最好的文檔。經(jīng)過(guò)良好定義的類(lèi)型可以提高易讀性,也可以在編譯時(shí)被檢查。同時(shí),類(lèi)型明確定義的代碼通常也會(huì)被優(yōu)化得更好。

Example, don't(反面示例)

Consider:(考慮以下代碼)

void pass(void* data);    // weak and under qualified type void* is suspicious

調(diào)用者無(wú)法確定函數(shù)可以接受何種類(lèi)型和數(shù)據(jù)是否可能被修改(由于沒(méi)有用const修飾)。注意所有的指針類(lèi)型都可以隱式轉(zhuǎn)換為void*,因此調(diào)用者很容易(隨便)提供一個(gè)值。

被調(diào)用者必須(通過(guò)默契)將數(shù)據(jù)靜態(tài)轉(zhuǎn)換為未經(jīng)驗(yàn)證的類(lèi)型以便使用它。這樣的代碼易錯(cuò)且冗長(zhǎng)。

只有在傳遞設(shè)計(jì)上C++無(wú)法描述的數(shù)據(jù)時(shí)才可以使用const void* 。否則考慮使用variant或者指向基礎(chǔ)類(lèi)型的指針作為代替手段。

可選項(xiàng):模板參數(shù)經(jīng)常可以消除void*而使用T*或者T&。對(duì)于一般的代碼,這里的T可以是普遍的或者概念約束的模板參數(shù)。

譯者注:concept是C++20已經(jīng)決定引入的新概念。

Example, bad(反面示例)

Consider:考慮以下代碼:

draw_rect(100, 200, 100, 500); // what do the numbers specify?draw_rect(p.x, p.y, 10, 20); // what units are 10 and 20 in?

調(diào)用者在描述一個(gè)矩形這一點(diǎn)是明確的,但卻不知道具體描述的是那些方面(四角坐標(biāo)還是邊長(zhǎng))。同時(shí),整形數(shù)據(jù)可以攜帶任意形式的信息,單位也存在很多可能,因此我們必須猜測(cè)四個(gè)整形參數(shù)的含義。前兩個(gè)很有可能是x,y坐標(biāo)對(duì),但是,后兩個(gè)呢?

注釋和參數(shù)名稱(chēng)可以提供幫助,但是我們可以(通過(guò)參數(shù)類(lèi)型)更加清晰地表達(dá):

void draw_rectangle(Point top_left, Point bottom_right);void draw_rectangle(Point top_left, Size height_width);
draw_rectangle(p, Point{10, 20});  // two cornersdraw_rectangle(p, Size{10, 20});   // one corner and a (height, width) pair

顯然,我們無(wú)法通過(guò)靜態(tài)類(lèi)型系統(tǒng)捕捉所有錯(cuò)誤(例如,認(rèn)為第一個(gè)參數(shù)是左上角這個(gè)事實(shí)就是一種慣例(命名和注釋?zhuān)?strong>Example, bad(反面示例)

Consider:(考慮以下代碼)

set_settings(true, false, 42); // what do the numbers specify?

參數(shù)的類(lèi)型和值沒(méi)有說(shuō)明哪種設(shè)定將會(huì)被修改,也沒(méi)有說(shuō)明值的含義。

This design is more explicit, safe and legible:

下面的設(shè)計(jì)更清晰、安全和可讀。

alarm_settings s{};s.enabled = true;s.displayMode = alarm_settings::mode::spinning_light;s.frequency = alarm_settings::every_10_seconds;set_settings(s);

For the case of a set of boolean values consider using a flags enum; a pattern that expresses a set of boolean values.

對(duì)于成組使用布爾值的情況,考慮使用枚舉類(lèi)型;下面的模式可以表示一套布爾值。

enable_lamp_options(lamp_option::on | lamp_option::animate_state_transitions);
Example, bad(反面示例)

In the following example, it is not clear from the interface what time_to_blink means: Seconds? Milliseconds?

在下面的例子中,接口沒(méi)有明確time_to_blink的含義:?jiǎn)挝皇敲脒€是毫秒?

void blink_led(int time_to_blink) // bad -- the unit is ambiguous{    // ...    // do something with time_to_blink    // ...}
void use(){    blink_led(2);}
Example, good(范例)  

std::chrono::duration類(lèi)型(C++11)可以讓時(shí)間間隔的單位更明確。

void blink_led(milliseconds time_to_blink) // good -- the unit is explicit{    // ...    // do something with time_to_blink    // ...}
void use(){    blink_led(1500ms);}

這個(gè)函數(shù)可以如下設(shè)計(jì)以便接受任何單位的時(shí)間間隔。

templatevoid blink_led(duration time_to_blink) // good -- accepts any unit{    // assuming that millisecond is the smallest relevant unit    auto milliseconds_to_blink = duration_cast(time_to_blink);    // ...    // do something with milliseconds_to_blink    // ...}
void use(){    blink_led(2s);    blink_led(1500ms);}

Enforcement(實(shí)施建議)

  • (Simple) Report the use of void* as a parameter or return type.

    (簡(jiǎn)單)報(bào)告使用void*作為參數(shù)或返回值的情況。

  • (Simple) Report the use of more than one bool parameter.

    (簡(jiǎn)單)報(bào)告以多個(gè)布爾值為參數(shù)的情況。

  • (Hard to do well) Look for functions that use too many primitive type arguments.

    (很難做好)找到使用太多原始類(lèi)型參數(shù)的函數(shù)。

“C++接口類(lèi)型怎么定義”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


本文標(biāo)題:C++接口類(lèi)型怎么定義
文章轉(zhuǎn)載:http://weahome.cn/article/iiehjd.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部