43 學習處理模版化基類內的名稱

2021-09-08 20:33:50 字數 527 閱讀 1728

1、考慮下面的場景,有個類模版templatebox{}; 內部有個方法***,現在子類templateclass bigbox:public box{},bigbox內部使用方法***,考慮出現什麼問題?

2、首先一點,類模版產生出來的類之間,沒有關係。也就是box與box沒有關係。通過指定模版實參,可以產生不同的模板類,也可以全特化乙個類,如下:

template <>

class box,這種情況下,就不再例項化模版類了,box可以宣告自己的介面,可能就沒有了***。那麼,問題出現了,bigbox繼承box,但是父類box可能有介面***,也可能沒有介面***,編譯器傻眼了。那麼還要不要繼承父類box的***方法呢?因為不確定一定有,所以不繼承,導致上面的情況編譯失敗。

3、怎麼解決?

解決辦法很簡單,就是明確說,我要繼承父類box的方法。

a、使用this->***();

b、使用using box::***;

c、使用box::***();

第三種辦法不好,因為會關閉virtual繫結行為。

條款43 學習處理模版化基類內的名稱

考慮以下 功能為傳送不同資訊至不同部門,採用模版方法。class companya class companyb 其他公司的類class msginfo 用來儲存資訊,以備用 templateclass msgsend void sendsecret const msginfo info 格式同上 ...

條款43 學習處理模板化基類內的名稱

條款43 學習處理模板化基類內的名稱 know how to access names in templatized base classes.內容 現在我們接到乙個編碼任務,任務要求我們的目標程式能夠傳送資訊到不同的公司去.這裡的資訊可以分為 被譯成密碼的資訊和未經加工資訊明文資訊.我們分析了任務...

條款43 學習處理模板化基類的名稱

先看程式 class a templateclass drivedusea public usea int main 1.在基類函式呼叫動作之前加上this this useafunc 2.使用using宣告 templateclass drivedusea public usea 3.明確指出被調...