不使用升压:
#include <cassert>
struct Integer
{
int value;
Integer(int x) : value(x) {}
};
bool operator<(Integer lhs,Integer rhs)
{
return lhs.value < rhs.value;
}
bool operator==(Integer lhs,Integer rhs)
{
return lhs.value == rhs.value;
}
template< class T >
bool operator!= (const T& L, const T& R) { return !(L==R); }
template< class T >
bool operator<= (const T& L, const T& R) { return (L < R) || (L == R); }
template< class T >
bool operator> (const T& L, const T& R) { return (!(L < R)) && (!(L == R)); }
template< class T >
bool operator>= (const T& L, const T& R) { return !(L < R); }
int main()
{
Integer a(1), b(2), c(1);
assert(a < b);
assert(a <= b);
assert(b > a);
assert(b >= a);
assert(a == c);
assert(a != b);
}
或更接近您的原始问题:
#include <cassert>
struct Integer {
int value;
Integer(int x) : value(x) {}
int compare(const Integer & rhs) const {
return (value - rhs.value);
}
};
template< class T >
bool operator== (const T& L, const T& R) { return L.compare(R)==0; }
template< class T >
bool operator!= (const T& L, const T& R) { return L.compare(R)!=0; }
template< class T >
bool operator< (const T& L, const T& R) { return L.compare(R)<0; }
template< class T >
bool operator<= (const T& L, const T& R) { return L.compare(R)<=0; }
template< class T >
bool operator> (const T& L, const T& R) { return L.compare(R)>0; }
template< class T >
bool operator>= (const T& L, const T& R) { return L.compare(R)>=0; }
int main() {
Integer a(1), b(2), c(1);
assert(a < b);
assert(a <= b);
assert(b > a);
assert(b >= a);
assert(a == c);
assert(a != b);
}