为什么错了:template<class T> bool myCompare(T& a, T& b) { if (a == b) { return true; } else { return false; } } //利用具体化Person的版本来实现代码,具体优化优先调用 template<class Person>bool myCompare(Person& p1, Person& p2) { if (p1.m_Name == p2.m_Name && p1.m_Age == p2.m_Age) { return true; } else { return false; } }
时间: 2024-03-25 15:41:31 浏览: 22
这段代码有两个问题:
1. 函数模板和具体化版本的参数类型不一致,会导致具体化版本无法调用。函数模板的参数是引用类型,而具体化版本的参数是 Person 类型。
2. 具体化版本的定义需要放在函数模板之后,否则编译器无法找到相应的具体化版本。
正确的代码应该是:
```c++
template<class T>
bool myCompare(T& a, T& b) {
if (a == b) {
return true;
} else {
return false;
}
}
class Person {
public:
string m_Name;
int m_Age;
public:
Person(string name, int age) {
m_Name = name;
m_Age = age;
}
};
template<>
bool myCompare<Person>(Person& p1, Person& p2) {
if (p1.m_Name == p2.m_Name && p1.m_Age == p2.m_Age) {
return true;
} else {
return false;
}
}
```
这段代码定义了一个函数模板 `myCompare`,以及一个具体化版本 `myCompare<Person>`。具体化版本的参数类型是 `Person` 类型,用来比较两个 `Person` 对象是否相等。注意,具体化版本的定义放在函数模板之后。