模板用於解耦

2021-06-07 12:14:24 字數 864 閱讀 7264

一道 c++ 思考題:std::string 的 operator << 和 operator >> 是如何宣告的,如何避免與 iostream 的過度耦合?iostream 和 string 都可以單獨 include 來使用,顯然 iostream 標頭檔案裡不會定義 string 的 << 和 >> 操作。那麼 string 標頭檔案裡會不會為了定義 << 和 >> 而 include iostream 呢?

c++ 對此有乙個解決辦法,寫乙個 non-member non-friend 且與 class 位於同一 namespace 的 templated operator <<,並且把操作**給 class member function 'writeto',後者可能本身是個 template,這樣可以避免耦合到 iostream。

泛型程式設計原意是用通用的**應用不同型別,這裡是鐵定只有一種型別的情況下用於解耦。《算是應用於兩個運算元的操作符,乙個是string,乙個iostream。你在使用string的時候不一定用到iostream,使用iostream的時候不一定用到string,又要求必須支援iostream對string的《操作。這時候自然要解耦了,這裡模板只是為了解耦,不是為了泛型演算法,因為需要支援iostream而不是多種型別。

另外,c++中某個函式內通過乙個介面,必須要接受實現這個介面的類作為引數;或者有些是訪問變數,這個類必須宣告了這個變數。

[cpp]view plain

copy

print?

inta(const

a* pa)  

而動態語言,比如as、lua,不會做嚴格型別檢查,不需要事先宣告,只要執行時接收的object有這個屬性就可以了。

c++中可以通過模板實現這種要求。

訊息解耦初探

一般來說解耦有兩條途徑,一是遠端請求,二是訊息 推送 這兩種方式可以說使用的應用場景不一樣,比如說遠端請求這是主動方在呼叫方,而推送的主動權肯定是在生產方。為什麼要解耦?這個。如果用訊息進行應用間解耦,訊息將作為應用間的介質作為上下文傳輸。其實知道生產者和消費者就很容易明白,這樣兩個應用之間將不會有...

Egret開發筆記 七 解耦方式之,掛接解耦

需求 首先,需求是這樣的。戰鬥結算介面 就是戰鬥結束後會有乙個介面顯示這場戰鬥的得失 要顯示一些東西。這些東西並不是固定的,比如,今天有可能要顯示 國慶快樂 明天又是要顯示一幅圖。此處將會舉例顯示乙個元件,因為元件上可以放任何你需要顯示的東西。難點如果需要顯示什麼,就手動在這個介面上,加什麼。那麼後...

工廠模式實現解耦

1.首先建立乙個業務類service,在service中有乙個屬性dao,daoimpl是實現了dao介面的類 public class serviceimpl public inte ce dao 2.在建立乙個測試類 public class testmethod 3.我們發現這樣雖然完成業務但...