C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板部分特例化
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板部分特例化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 類模板的部分特例化(partial specialization)
類模板的特例化不必為所有模板參數提供實參(可以只指定一部分而非所有模板參數, 或是參數的一部分而非全部特性)。類模板的部分特例化本身是一個模板, 使用它時用戶還必須為那些在特例化版本中未指定的模板參數提供實參。
1.1
//原始的、 最通用的版本 template <class T> struct remove_reference {typedef T type; };// 部分特例化版本, 將用于左值引用和右值引用 template <class T> struct remove_reference<T &> // 左值引用 { typedef T type; };template <class T> struct remove_reference<T &&> // 右值引用 { typedef T type; };三個變量 a、 b 和 c 均為 int 類型。
int i; //decltype(42)為int, 使用原始模板 remove_reference<decltype(42)>::type a;//decltype (i)為int&, 使用第一個(T&) 部分特例化版本 remove_reference<decltype(i)>::type b;//decltype(std::move(i))為int &&, 使用第二個即T&&)部分特例化版本 remove_reference<decltype(std::move(i))>::type c;2. 特例化成員而不是類
可以只特例化特定成員函數而不是特例化整個模板
template <typename T> struct Foo {Foo(const T &t = T()):mem(t){ }void Bar(){ /*...*/ }T mem;// Foo 的其他成員 }//特例化一個模板 template<> void Foo<int>::Bar() //特例化 Foo<int>的成員 Bar {//進行應用于int的特例化處理 }Foo<string> fs;//實例化 Foo<string>::Foo( ) fs.Bar();// 實例化 Foo<string>::Bar( ) Foo<int> fi; //實例化 Foo<int>::Foo( ) fi.Bar();//使用我們特例化版本的 Foo<int>::Bar( )總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板部分特例化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha