本部分包括的內容為variadic templates(可變模板引數),這部分似乎是個概述,我看到後面有好幾節課也是這個主題。
void print()
template //這裡的...是關鍵字的一部分
void print(const t& firstarg, const types&... args) //這裡的...要寫在自定義型別types後面
1. 注意三種不同的...的應用環境,這些都是語法規則,所以記住即可。
2. 還要注意的是,在可變模板引數內部可以使用sizeof...(args)得到實參的個數。
3. 如果同時定義了:
template void print(const types&... args)
那麼這兩個定義會優先呼叫哪個?換句話說,哪個定義更加泛化,哪個更加特化?這個侯捷老師說以後會做解釋
(更新:這個更加泛化,所以會呼叫之前定義的更特化的版本)
1. 實現函式的遞迴呼叫
舉了乙個unordered容器中hash函式的計算例子:
class customerhash
};template inline void hash_val(size_t& seed, const t& val, const types&... args)
template inline size_t hash_val(const types&... args)
template inline void hash_val(size_t& seed, const t& val)
本質上和概述裡的例子一樣,都是利用可變模板引數的函式遞迴操作,這裡就不多做解釋了。
2. 實現遞迴繼承
這裡舉了乙個tuple的實現的例子:
template class tuple;
template <> class tuple<> {};
template class tuple: private tuple//注意這裡的私有繼承
tuple(head v, tail... vtail)
:m_head(v), inherited(vtail...) {}
head head()
inherited& tail() //這裡涉及派生類到基類的型別轉換
protected:
head m_head;
};
ppt裡解釋得很清楚:
c 11 新特性 (二)
1.nullptr 專門形容指標為空 2.強類列舉 enum direction enum answer 3靜態斷言,可在編譯時作判斷 static assert size of int 4 4.建構函式的相互呼叫 delegating constructor class a a int x,int...
C 11新特性 二
目錄 default,delete 配合建構函式和拷貝賦值 一起使用 alias template template typedef type alias別名 using noexcept override final decltype lambda 右值引用 對於乙個空的class c 編譯器處理...
C 11新特性學習筆記(二)
c 11引入了lambda 匿名函式 這樣就可以在乙個函式只需呼叫一次的地方使用了,類似內聯函式。c 11 的 lambda 表示式規範如下 capture params mutable exception attribute ret 1 capture params ret 2 capture p...