模板的偏特化,全特化
c++中的模板分為類别範本和函式模板
模板的特化分為倆種:全特化和偏特化
全特化:
舉一個簡單的例子
template<class T>
class AA
{
public:
AA()
:_a(0)
{}
~AA()
{
cout << "原始模板" << endl;
}
protected:
T _a;
};
template<>
class AA<int>
{
public:
AA()
:_a(0)
{}
~AA()
{
cout << "全特化後的int版本" << endl;
}
protected:
int _a;
};
void test()
{
AA<char> a;
AA<int> b;
}
可以發現,A<int> b呼叫的是我們全特化後的版本,而A<char> a呼叫的是原始版本。
偏特化:
偏特化又稱為區域性特化,全特化是對所有的模板引數進行特化,偏特化是對區域性的引數特化
一個簡單的例子:
template<class T1,class T2>
class Data
{
public:
Data();
protected:
T1 _d1;
T2 _d2;
};
template<class T1,class T2>
Data<T1, T2>::Data()
{
cout << "Data<T1,T2>" << endl;
}
//區域性特化第二個引數
template<class T1>
class Data<T1,int>
{
public:
Data();
protected:
T1 _d1;
int _d2;
};
template<class T1>
Data<T1, int>::Data()
{
cout << "Data<T1,int>" << endl;
}
void test1()
{
Data<double,int> d1;
Data<int,double> d2;
}
當我們在例項化物件的時候,如果定義的型別剛好符合區域性特化的型別,那麼就直接呼叫區域性特化版本的模板類
偏特化並不是僅僅指對特定的部分引數進行限制,而是針對模板引數更進一步的條件限制所設計出來的一個特化版本。通過下述例子可以看出:
//區域性特化倆個引數為指標型別
template<class T1,class T2>
class Data<T1*, T2*>
{
public:
Data();
private:
T1 _d1;
T2 _d2;
T1* _d3;
T2* _d4;
};
template<class T1,class T2>
Data<T1*, T2*>::Data()
{
cout << "Data<T1*,T2*>"<< endl;
}
//區域性特化倆個引數為引用型別
template<class T1, class T2>
class Data<T1&, T2&>
{
public:
Data(const T1& d1,const T2& d2);
private:
const T1& _d1;
const T2& _d2;
T1* _d3;
T2* _d4;
};
template<class T1, class T2>
Data<T1&, T2&>::Data(const T1& d1, const T2& d2)
:_d1(d1)
, _d2(d2)
{
cout << "Data<T1&,T2&>" << endl;
}
模板的全特化和偏特化都是在語句定義的模板基礎之上,不能單獨存在
相關文章
- const char*的全特化
- C#模擬C++模板特化對型別的值的支援C#C++型別
- Python311新特性-特化指令specializing adaptive interpreter-typing-asyncioPythonAPT
- C++知識點57——類别範本(2、類别範本的區域性特化與預設模板實參)C++
- 解讀 Flutter 全平臺開發的誤解與偏見Flutter
- Python全棧Web(Django框架、模板)Python全棧WebDjango框架
- 認知偏見之行動偏見
- AI的“色差”與“糾偏”AI
- python的偏函式(partial)Python函式
- flask路由系統、偏函式、CBV、模板、請求響應、session、請求擴充套件Flask路由函式Session套件
- Verilog外掛:補全模組例項模板
- 淺談偏序
- 三維偏序的優秀做法
- 偏序 分塊+bitset
- BI+智慧醫療,Smartbi一套高能模板全搞定!
- 標杆之死:《虛榮》的傲慢與偏見
- JS中的 偏函式 和 柯里化JS函式
- 論系統管理員的傲慢與偏見
- 二維偏序問題
- 人類本性都有傲慢與偏見,那麼人工智慧會有偏見嗎?人工智慧
- CDQ分治和三維偏序
- 規範與偏離規範
- 偏相關係數計算
- Flask——模板的使用Flask
- 「狐狸」的模板庫
- django的模板層Django
- 02 #### Flask模板的語法+模板的渲染(本質:替換)Flask
- Python利用partial偏函式生成不同的聚合函式Python函式
- 偏執的天美:與玩家“較勁”這些年
- 哪些認知偏見左右著人們的判斷?
- 人們對《DOOM》的誤解、偏見以及刻板印象OOM
- 偏前端開發相關好用的工具(長期更新)前端
- 易優的前端模板模板是在哪個目錄?前端
- c++11-17 模板核心知識(十二)—— 模板的模板引數 Template Template ParametersC++
- 認知偏見之錨定偏差
- 認知偏見之模糊效應
- mapboxgl 糾偏百度地圖地圖
- Python 偏函式用法全方位解析Python函式