Недавно я работал над некоторым кодом и решил работать над перегрузкой моего оператора на С++, потому что я никогда не реализовал его раньше. Поэтому я перегрузил операторы сравнения для моего класса матрицы, используя функцию сравнения, которая возвращала 0, если LHS был меньше, чем RHS, 1, если LHS был больше RHS и 2, если они были равны. Затем я использовал свойства логического не в С++ для целых чисел, чтобы получить все мои сравнения в одной строке:
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));
}
Я не знаю, что это действительно повышает читаемость.