弁言
模板类详细化(特化、特例化)有两种:完全详细化和部分详细化。详细化程度高的类优先于详细化程度低的类,详细化的类优先于没有详细化的类。
详细化的模板类,成员函数类外实现的代码应该放在源文件中。[此文章内容了解即可]。
正常的类模板
- // 类模板
- 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;
- }
复制代码 整体参考
- #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;}
复制代码 感谢浏览,一起学习!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |