C++ ------ 模板类具体化
引言
模板类具体化
(特化、特例化)有两种:完全具体化
和部分具体化
。具体化程度高
的类优先
于具体化程度低的类,具体化
的类优先
于没有具体化的类。
具体化的模板类,成员函数类外实现
的代码应该放在源文件
中。[此文章内容了解即可]。
正常的类模板
cpp
// 类模板
template <class T1, class T2>
class AA {
public:
T1 m_x;
T2 m_y;
AA(const T1 x, const T2 y): m_x(x), m_y(y) {cout << "类模板的构造函数" << endl;}
void show() const;
};
template <class T1, class T2>
void AA<T1, T2>::show() const {// 成员函数类外实现
cout << "类模板:m_x = " << m_x << ", m_y = " << m_y << endl;
}
完全具体化
cpp
// 完全具体化的意思是:为这两个通用类型参数指定具体的数据类型
template <>
class AA<int, string> {
public:
int m_x;
string m_y;
AA(const int x, const string y): m_x(x), m_y(y) {cout << "完全具体化的构造函数" << endl;}
void show() const;
};
void AA<int, string>::show() const {
cout << "完全具体化:m_x = " << m_x << ", m_y = " << m_y << endl;
}
部分具体化
cpp
// 类模板部分具体化:为多个模板参数的部分参数指定具体的数据类型
// 函数模版没有部分模板具体化,类模板才有
template <class T1>
class AA<T1, string> {
public:
T1 m_x;
string m_y;
AA(const T1 x, const string y): m_x(x), m_y(y) {cout << "部分具体化的构造函数" << endl;}
void show() const;
};
template <class T1>
void AA<T1, string>::show() const {
cout << "部分具体化:m_x = " << m_x << ", m_y = " << m_y << endl;
}
整体参考
cpp
#include <iostream>
using namespace std;
// 类模板
template <class T1, class T2>
class AA {
public:
T1 m_x;
T2 m_y;
AA(const T1 x, const T2 y): m_x(x), m_y(y) {cout << "类模板的构造函数" << endl;}
void show() const;
};
template <class T1, class T2>
void AA<T1, T2>::show() const {// 成员函数类外实现
cout << "类模板:m_x = " << m_x << ", m_y = " << m_y << endl;
}
// 完全具体化的意思是:为这两个通用类型参数指定具体的数据类型
template <>
class AA<int, string> {
public:
int m_x;
string m_y;
AA(const int x, const string y): m_x(x), m_y(y) {cout << "完全具体化的构造函数" << endl;}
void show() const;
};
void AA<int, string>::show() const {
cout << "完全具体化:m_x = " << m_x << ", m_y = " << m_y << endl;
}
// 类模板部分具体化:为多个模板参数的部分参数指定具体的数据类型
// 函数模版没有部分模板具体化,类模板才有
template <class T1>
class AA<T1, string> {
public:
T1 m_x;
string m_y;
AA(const T1 x, const string y): m_x(x), m_y(y) {cout << "部分具体化的构造函数" << endl;}
void show() const;
};
template <class T1>
void AA<T1, string>::show() const {
cout << "部分具体化:m_x = " << m_x << ", m_y = " << m_y << endl;
}
int main() {
AA<string, float> a("sfdbn", 21343.354); // 运行类模板的构造函数
// AA<int, string> a(21343, "sfdbn"); // 运行完全具体化的构造函数
// AA<float, string> a(21.343, "sfdbn"); // 运行部分具体化的构造函数
a.show();
return 0;
}
感谢浏览,一起学习!