矢量操作的一段代码包含这些类模板定义:
template <class T>
class lt {
public:
static int compare(T a, T b) { return(a < b); }
};
template <class T>
class gt {
public:
static int compare(T a, T b) { return(a > b); }
};
但为什么呢?它没有使用额外的异常处理,而是依赖于已经拥有T
和operator<
的类operator>
的对象。使用运营商不是那么简单/容易吗?或者应该使用模板类进行比较?
答案 0 :(得分:4)
只要有人期望二元谓词,即使用两个参数的自由函数,就可以使用这些模板。重载operator<
可能不会被定义为免费的二进制函数,因此这些模板可以作为一种适配器使用,无论它们如何定义,都可以使用现有的运算符,只要表达式 a < b
可以解决。
请注意,该标准已经提供了非常相似的*模板;它们被称为std::less
和std::greater
,它们例如由有序的关联容器使用。
*)标准库谓词为它们如何处理指针提供了额外的保证。
答案 1 :(得分:0)
事情是比较并不总是数字。有时可以比较两个对象,大于或小于可以有新的定义。例如在坐标类型对象的> class 可以自定义方式定义比较。 例如:
Coordinate c1(3,5)
Coordinate c2(4,2)
我们可以重载> operator
,只要c1>c2
或c1.x > c2.x
c1.y>c2.y
返回True