本文主要是介绍C++模板的局限性,提供特殊的类型具体化模板,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
为了解决自定义数据无法调用常规模板,提供模板的重载(具体化模板),可以位这些特定的类型提供具体化的模板
总结:
- 利用具体化的模板,可以解决自定义类型的通用化
- 学习模板并不是为了写模板,而是在STL能够运用系统提供的模板
#include<iostream>
using namespace std;
#include<string>class Person
{
public:Person(string name, int age){this->m_age = age;this->m_name = name;}string m_name;int m_age;
};//普通函数模板
template<class T>
bool mycompare(T& a, T& b)
{if (a == b){return true;}else{return false;}
}
//具体化,显示具体化的原型和定意思以template<>开头,并通过名称来指出类型
//具体化优先于常规模板
template<> bool mycompare(Person& p1, Person& p2)
{if (p1.m_name == p2.m_name && p1.m_age == p2.m_age){return true;}else{return false;}
}void test01()
{int a = 10;int b = 10;//内置数据类型可以直接使用通用的函数模板bool ret = mycompare(a, b);if (ret){cout << "a = b" << endl;}else{cout << "a!=b" << endl;}
}void test02()
{Person p1("Tom", 10);Person p2("Tom", 10);//自定义数据类型,不会调用普通的函数模板//可以创建具体化的Person数据类型的模板,用于特殊处理这个类型bool ret = mycompare(p1, p2);if (ret){cout << "p1==p2" << endl;}else{cout << "p1!=p2" << endl;}
}int main()
{test01();test02();return 0;
}
这篇关于C++模板的局限性,提供特殊的类型具体化模板的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!