C++ Primer 5th笔记(chap 16 模板和泛型编程)转发参数包
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 16 模板和泛型编程)转发参数包
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 使用可變參數模板與 forward 機制來編寫函數, 實現將其實參不變地傳遞給其他函數(保持實參的原始類型)
1.1 eg
class StrVec {public:template <class... Args> void emplace_back (Args&&...); }模板參數包擴展中的模式是 &&, 意味著每個函數參數將是一個指向其對應實參的右值引用。
template <class... Args> inline void StrVec::emplace_back (Args && args) {chk_n_alloc ( ); / / 如果需要的話重新分配 StrVec 內存空間alloc.construct (first_free++, std::forward<Args> (args)...); }1.2 std::forward (args ) …
- 擴展了模板參數包 Args
- 擴展了函數參數包std::forward (ti) :
其中Ti表示模板參數包中第i個元素的類型, ti表示函數參數包中第i個元素。
eg.
StrVec svec; //將cccccccccc 添加為新的尾元素 //construct 調用中的模式會擴展出 std::forward<int> (10) , std::forward<char> (c) svec.emplace_back (10, 'c' );如果用一個右值調用 emplace_back, 則construct 也會得到一個右值。
eg.
forward的結果類型是 string&&, 因此 construct 將得到一個右值引用實參。 construct 會繼續將此實參傳遞給 string 的移動構造函數來創建新元素。
總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 16 模板和泛型编程)转发参数包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha