C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参推断
1. 模板實(shí)參推斷( template argument deduction)
在模板實(shí)參推斷過(guò)程中, 編譯器使用函數(shù)調(diào)用中的實(shí)參類型來(lái)尋找模板實(shí)參, 用這些模板實(shí)參生成的函數(shù)版本與給定的函數(shù)調(diào)用最為匹配。
1.1 實(shí)參類型轉(zhuǎn)換
如果一個(gè)函數(shù)形參的類型使用了模板類型參數(shù), 那么它采用特殊的初始化規(guī)則。 類型轉(zhuǎn)換:
- const轉(zhuǎn)換。可以將一個(gè)非const對(duì)象的指針或者引用傳遞給一個(gè)const指針或者引用形參。
- 數(shù)組或函數(shù)指針轉(zhuǎn)換,如果函數(shù)形參不是引用類型,則可以對(duì)數(shù)組或者函數(shù)類型的實(shí)參應(yīng)用正常的指針轉(zhuǎn)換
但是
- 編譯器通常不是對(duì)實(shí)參進(jìn)行類型轉(zhuǎn)換,而是生成一個(gè)新的模板實(shí)例。
- 其他的類型轉(zhuǎn)換,如算術(shù)轉(zhuǎn)換,派生類向基類的轉(zhuǎn)換,以及用戶自定義的轉(zhuǎn)換,都不能應(yīng)用于函數(shù)模板的實(shí)參。
1.2 使用相同模板參數(shù)類型的函數(shù)形參
一個(gè)模板類型參數(shù)可以用作多個(gè)函數(shù)形參的類型。 由于只允許有限的幾種類型轉(zhuǎn)換,因此傳遞給這些形參的實(shí)參必須具有相同的類型。 如果推斷出的類型不匹配, 則調(diào)用就是錯(cuò)誤的。
eg, compare 函數(shù)接受兩個(gè) const T &參數(shù), 其實(shí)參必須是相同類型: long lng; compare (lng, 1024 ); / / 錯(cuò)誤: 不能實(shí)例化 compare (long, int )- 解決方法:將函數(shù)模板定義為兩個(gè)類型參數(shù):
1.3 正常類型轉(zhuǎn)換應(yīng)用于普通函數(shù)實(shí)參
函數(shù)模板可以有用普通類型定義的參數(shù), 即, 不涉及模板類型參數(shù)的類型。 這種函數(shù)實(shí)參不進(jìn)行特殊處理; 它們正常轉(zhuǎn)換為對(duì)應(yīng)形參的類型。
eg.
template <typename T> ostream Sprint (ostream &os, const T &obj ) {return os ? obj; }print (cout, 42 ); // 實(shí)例化 print (ostream&, int ) ofstream f ("output" ); print (f, 10); // 使用 print (ostream&, int ) ; 將 f 轉(zhuǎn)換為 ostream&總結(jié)
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参推断的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha