【发布时间】:2014-05-18 10:08:42
【问题描述】:
我想为 std::pair 类重载运算符
template <>
bool operator< (const std::pair<int, std::string>& lhs, const std::pair<int, std::string>& rhs) {
return lhs.first > rhs.first || (!(rhs.first > lhs.first) && lhs.second < rhs.second);
};
我收到以下错误:没有函数模板匹配函数模板专业化'operator
我也试过了:
template <>
bool std::pair<int, std::string>::operator< (const std::pair<int, std::string>& lhs, const std::pair<int, std::string>& rhs) {
return lhs.first<rhs.first || (!(rhs.first<lhs.first) && lhs.second<rhs.second);
};
这次我得到错误:overloaded 'operator
我该怎么做?
【问题讨论】:
-
没有
template <>你的第一个版本应该没问题。 -
第一个应该可以,但您不需要将其设为模板 - 尝试在开头省略
template <> -
另一个原因可能是(使用
template <>特化),您忘记使用-std=c++11标志编译代码。 -
覆盖背后的逻辑无效,因为它没有建立排序。尝试比较
x={2,"A"}和y={1, "B"}。x<y和y<x的结果都是true,这意味着不能使用重载进行排序。 -
即使编译了特化,您仍然应该更喜欢使用非模板函数重载:gotw.ca/publications/mill17.htm