C++ Primer 5th笔记(chap 16 模板和泛型编程)可变参数模板
1. 可變參數(shù)模板( variadic template)
一個(gè)接受可變數(shù)目參數(shù)的模板函數(shù)或模板類(lèi)。
1.1 參數(shù)包 (parameter packet)
可變數(shù)目的參數(shù)被稱(chēng)為參數(shù)包,存在兩種參數(shù)包:
- 模板參數(shù)包( template parameter packet), 表示零個(gè)或多個(gè)模板參數(shù);
- 函數(shù)參數(shù)包( function parameter packet ), 表示零個(gè)或多個(gè)函數(shù)參數(shù)。
1.1.1 一個(gè)省略號(hào)來(lái)指出一個(gè)模板參數(shù)或函數(shù)參數(shù)表示一個(gè)包
-
在一個(gè)模板參數(shù)列表中, class…或 typename…指出接下來(lái)的參數(shù)表示零個(gè)或多個(gè)類(lèi)型的列表: 一個(gè)類(lèi)型名后面跟一個(gè)省略號(hào)表示零個(gè)或多個(gè)給定類(lèi)型的非類(lèi)型參數(shù)的列表。
-
在函數(shù)參數(shù)列表中,如果一個(gè)參數(shù)的類(lèi)型是一個(gè)模板參數(shù)包, 則此參數(shù)也是一個(gè)函數(shù)參數(shù)包。
1.1.2 舉例
- foo 是一個(gè)可變參數(shù)函數(shù)模板:一個(gè)名為 T 的類(lèi)型參數(shù),一個(gè)名為 Args的模板參數(shù)包。
- foo 的函數(shù)參數(shù)列表:一個(gè)const &類(lèi)型的參數(shù)(指向T的類(lèi)型), 一個(gè)名為 rest 的函數(shù)參數(shù)包,
編譯器會(huì)為 foo 實(shí)例化出四個(gè)不同的版本:
void foo (const int &, const strings, const int &, const doubles); void foo (const strings, const int &, const char [ 3 ] & ) void foo (const doubles, const strings); void foo (const char [3] &);1.2 sizeof…運(yùn)算符
當(dāng)我們需要知道包中有多少元素時(shí), 可以使用 sizeof…運(yùn)算符。sizeof…也返回一個(gè)常量表達(dá)式, 而且不會(huì)對(duì)其實(shí)參求值:
template<typename ... Args> void g (Args ... args) {cout ? sizeof... (Args) ? endl; // 類(lèi)型參數(shù)的數(shù)目cout ? sizeof... (args ) ? endl; // 函數(shù)參數(shù)的數(shù)目 }總結(jié)
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 16 模板和泛型编程)可变参数模板的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha