C++ —— 模板类详细化

打印 上一主题 下一主题

主题 769|帖子 769|积分 2307

弁言

模板类详细化(特化、特例化)有两种:完全详细化和部分详细化。详细化程度高的类优先于详细化程度低的类,详细化的类优先于没有详细化的类。
详细化的模板类,成员函数类外实现的代码应该放在源文件中。[此文章内容了解即可]。
正常的类模板

  1. // 类模板
  2. template <class T1, class T2>
  3. class AA {
  4. public:
  5.     T1 m_x;
  6.     T2 m_y;
  7.     AA(const T1 x, const T2 y): m_x(x), m_y(y) {cout << "类模板的构造函数" << endl;}
  8.     void show() const;
  9. };
  10. template <class T1, class T2>
  11. void AA<T1, T2>::show() const {// 成员函数类外实现
  12.     cout << "类模板:m_x = " << m_x << ", m_y = " << m_y << endl;
  13. }
复制代码
完全详细化

  1. // 完全具体化的意思是:为这两个通用类型参数指定具体的数据类型
  2. template <>
  3. class AA<int, string> {
  4. public:
  5.     int m_x;
  6.     string m_y;
  7.     AA(const int x, const string y): m_x(x), m_y(y) {cout << "完全具体化的构造函数" << endl;}
  8.     void show() const;
  9. };
  10. void AA<int, string>::show() const {
  11.     cout << "完全具体化:m_x = " << m_x << ", m_y = " << m_y << endl;
  12. }
复制代码
部分详细化

  1. // 类模板部分具体化:为多个模板参数的部分参数指定具体的数据类型
  2. // 函数模版没有部分模板具体化,类模板才有
  3. template <class T1>
  4. class AA<T1, string> {
  5.     public:
  6.     T1 m_x;
  7.     string m_y;
  8.     AA(const T1 x, const string y): m_x(x), m_y(y) {cout << "部分具体化的构造函数" << endl;}
  9.     void show() const;
  10. };
  11. template <class T1>
  12. void AA<T1, string>::show() const {
  13.     cout << "部分具体化:m_x = " << m_x << ", m_y = " << m_y << endl;
  14. }
复制代码
整体参考

  1. #include <iostream>using namespace std;// 类模板
  2. template <class T1, class T2>
  3. class AA {
  4. public:
  5.     T1 m_x;
  6.     T2 m_y;
  7.     AA(const T1 x, const T2 y): m_x(x), m_y(y) {cout << "类模板的构造函数" << endl;}
  8.     void show() const;
  9. };
  10. template <class T1, class T2>
  11. void AA<T1, T2>::show() const {// 成员函数类外实现
  12.     cout << "类模板:m_x = " << m_x << ", m_y = " << m_y << endl;
  13. }
  14. // 完全具体化的意思是:为这两个通用类型参数指定具体的数据类型
  15. template <>
  16. class AA<int, string> {
  17. public:
  18.     int m_x;
  19.     string m_y;
  20.     AA(const int x, const string y): m_x(x), m_y(y) {cout << "完全具体化的构造函数" << endl;}
  21.     void show() const;
  22. };
  23. void AA<int, string>::show() const {
  24.     cout << "完全具体化:m_x = " << m_x << ", m_y = " << m_y << endl;
  25. }
  26. // 类模板部分具体化:为多个模板参数的部分参数指定具体的数据类型
  27. // 函数模版没有部分模板具体化,类模板才有
  28. template <class T1>
  29. class AA<T1, string> {
  30.     public:
  31.     T1 m_x;
  32.     string m_y;
  33.     AA(const T1 x, const string y): m_x(x), m_y(y) {cout << "部分具体化的构造函数" << endl;}
  34.     void show() const;
  35. };
  36. template <class T1>
  37. void AA<T1, string>::show() const {
  38.     cout << "部分具体化:m_x = " << m_x << ", m_y = " << m_y << endl;
  39. }
  40. 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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

十念

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表