Недавно я работал над некоторым кодом и решил поработать над перегрузкой моего оператора в c ++, потому что я никогда раньше не реализовывал его.Поэтому я перегружал операторы сравнения для моего класса матрицы, используя функцию сравнения, которая возвращала 0, если LHS было меньше, чем RHS, 1, если LHS была больше, чем RHS, и 2, если они были равны.Затем я использовал свойства логического не в c ++ для целых чисел, чтобы получить все мои сравнения в одну строку:
inline bool Matrix::operator<(Matrix &RHS){
return ! (compare(*this,RHS));
}
inline bool Matrix::operator>(Matrix &RHS){
return ! (compare((*this),RHS)-1);
}
inline bool Matrix::operator>=(Matrix &RHS){
return compare((*this),RHS);
}
inline bool Matrix::operator<=(Matrix &RHS){
return compare((*this),RHS)-1;
}
inline bool Matrix::operator!=(Matrix &RHS){
return compare((*this),RHS)-2;
}
inline bool Matrix::operator==(Matrix &RHS){
return !(compare((*this),RHS)-2);
}
Очевидно, что я должен передавать RHS как const, я просто, вероятно, не собираюсьснова используйте этот класс матрицы, и мне не хотелось писать другую функцию, которая не была ссылкой, чтобы получить значения индекса массива исключительно для операции компаратора.
Согласно предложению, здесь приведен код, если Compare возвращает -1 для меньшего, 0 для равного и 1 для положительного.
inline bool Matrix::operator<(Matrix &RHS){
return ! (compare(*this,RHS)+1);
}
inline bool Matrix::operator>(Matrix &RHS){
return ! (compare((*this),RHS)-1);
}
inline bool Matrix::operator>=(Matrix &RHS){
return compare((*this),RHS)+1;
}
inline bool Matrix::operator<=(Matrix &RHS){
return compare((*this),RHS)-1;
}
inline bool Matrix::operator!=(Matrix &RHS){
return compare((*this),RHS);
}
inline bool Matrix::operator==(Matrix &RHS){
return !(compare((*this),RHS));
}
Я не знаю, что это действительно повышает читаемость, хотя.