模板的通用性不是万能的

# include<iostream>

using namespace std;

class Person
{
public:
	Person(string name, int age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}
	string m_Name;
	int m_Age;


};
//模板的局限性
//模板不是万能的,有些特定数据类型,需要用具体化方式做特殊实现

//对比两个数据是否相等
template<typename T>
bool myCompare(T &a, T &b)
{
	if (a == b)
		return true;
	else
		return false;
}
//利用具体化Person的版本实现代码,具体化优先调用
//<>类具体化 
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 = 20;
	bool ret = myCompare(a, b);
	if (ret)
	{
		cout << "a与b相等" << endl;
	}
	else
	{
		cout << "a与b不相等" << endl;
	}
		
}

void test02()
{
	Person p1("Tom", 110);
	Person p2("Tom", 10);
	bool ret = myCompare(p1, p2);
	//方法1:==运算符重载
	if (ret)
	{
		cout << "p1==p2" << endl;
	}
	else
	{
		cout << "p1!=p2" << endl;
	}

}


int main()
{
	test02();
	system("pause");
	return 0;
}

 

 

 

Logo

GitCode AI社区是一款由 GitCode 团队打造的智能助手,AI大模型社区、提供国内外头部大模型及数据集服务。

更多推荐