BZ易风

导航

 

1.

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
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<class T>
bool myCompare(T& a, T& b)
{
    if (a == b)
    {
        return true;
    }
    return false;
}
void test01()
{
    Person p1("Tom",10);
    Person p2("Jerry",20);
    int res = myCompare(p1, p2); //可以自行推导类型,但是无法判断
    cout << res << endl;
}


int main()
{
    test01();
    system("Pause");
    return 0;
}

结果:

 

解决方法

模板不能解决所有的类型

如果出现不能解决的类型,可以通过第三地具体化来解决问题

template<> 返回值  函数名<具体类型>(参数) (返回值、函数名、参数等都必须和模板返回值保持一致)

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
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<class T>
bool myCompare(T& a, T& b)
{
    if (a == b)
    {
        return true;
    }
    return false;
}
//通过第三代具体化自定义数据类型,解决不能做对比的问题
//如果具体化能够优先匹配,那么就选择具体化
//第三代具体化语法: template<> 返回值 函数名<具体类型>(参数...)
template<> bool myCompare<Person>(Person& a, Person& b)
{
    if (a.m_Age == b.m_Age)
    {
        return true;
    }
    return false;
}
void test01()
{
    Person p1("Tom",10);
    Person p2("Jerry",10);
    int res = myCompare(p1, p2); //可以自行推导类型,但是无法判断
    cout << res << endl;
}


int main()
{
    test01();
    system("Pause");
    return 0;
}

结果:

 

posted on 2021-08-24 15:48  BZ易风  阅读(43)  评论(0编辑  收藏  举报