c 模板的巧妙

2021-07-08 18:52:59 字數 1126 閱讀 6050

大部分的c++程式設計師都寫過模板。可以說模板是個非常巧妙的東西,它被使用在c++的stl的實現中,也同樣經常被用在各種開源**的底層,更經常被各程式設計師作為底層**開發的乙個基礎。對於模板的概念這裡也不再贅述,只闡述模板的巧妙,當然這也只屬於個人的理解,可能存在錯誤,歡迎各同行朋友來指正。

首先先看幾行**:

templateclass base_1

;templateclass base

};templateclass base::int>

};

請問一下幾行輸出結果是什麼?為什麼?

baseaaaa1;

baseaaaa2;

baseaaaa3;

在上述**中,模板的定義就用到了幾個巧妙的地方:

1. template在這行宣告中,宣告了模板的兩個類,然而第二個類的預設是void,即在這個模板生命下的base, 可以這麼定義物件:base或者base;前者物件宣告和後者物件宣告是不同的。

2. 在第二個類base的定義中,實際是針對第乙個base宣告的偏特化(關於偏特化網上有很多資料可以參考,這裡不做細緻的解釋)。而偏特化就是針對需要特殊處理的型別做的特殊處理,也是模板的乙個巧妙之處。

如果在上述**,能夠毫不猶豫的說出正確答案,那麼下面的**又做何理解?

#include #include #include using namespace std;

templateclass a

};templateclass a::value>::type>

};int main()

對於上述**應該輸出什麼,可能很多的第乙個答案都是11, 但實際答案是22。這個就是上述模板定義的另乙個巧妙之處,重點在於

class a::value>::type>

這句定義可以理解為兩個定義,當理解這個就不難理解了。乙個如下:

templateclass a

};

另乙個如下:

templateclass a

};

巧妙的使用模板字串生成dom元素

通常,我們拼接dom元素字串是這樣的.function createdom option 看起來似乎沒有什麼毛病,挺好的,但是,一旦這個dom元素資料龐大複雜一些,這種方式看起來就好比看天書.來看看優化方案 function createdom option join join 將陣列進行拼接 將t...

巧妙的利用C 的特性實現Profiling

軟體中profile的解釋很多,有時候指的是一組設定值,這裡說的profile是對執行程式的資料取樣,獲得記憶體使用和執行時間的紀錄,通過分析得以優化 1 記憶體profile。c 提供巨集和函式過載的功能,由此可以新增對記憶體的紀錄,將一下 放在標頭檔案中,專案中每個.cpp檔案都include這...

c 模板的成員模板

成員模板 成員模板 乙個類 無論是普通類還是模板類 可以包含本身是模板的成員函式。成員模板不能是虛函式 普通類的成員模板 class debugdelete 與任何函式模板相同,t的型別由編譯器推斷 templatevoid opreator t p const private std ostrea...