Меня немного сбивает с толку оператор трехстороннего сравнения. Я не понимаю, почему два типа возвращаемых значений, которые я перечислил ниже, используются с оператором трехстороннего сравнения.
- std::strong_ordering
- std::weak_ordering
Не могли бы вы использовать интерфейс ниже, чтобы показать мне, как можно перегрузить для него трехсторонний оператор сравнения. Объект Position должен быть больше, если его свойство row больше, чем у другого объекта Position. Если значения строк объекта Position равны, то наибольшим является тот, у которого значение столбца больше. Если значения строки и столбца равны, то обе позиции одинаковы (или равны).
2. Строку объектов координат и col можно рассматривать просто как size_t или int, поскольку они в любом случае являются именно такими.
#pragma once
#ifndef POSITION_HPP
#define POSITION_HPP
#include
#include
#include
#include
#include
#include
namespace Text {
class Position
{
Coordinate row; /// @private
Coordinate col; /// @private
public:
Position();
Position(size_t rowNum);
Position(size_t rowNum, size_t colNum);
Position(Position &) noexcept = default; /// Copy Ctor
Position(Position &&) noexcept = default; /// Move Ctors
Position &operator = (const Position &) = default; /// Copy Assignment Ops
Position &operator = (Position &&) noexcept = default; /// Move Assignment Op
Coordinates getCoordinates() noexcept;
Coordinate getRow() noexcept;
Coordinate getCol() noexcept;
void setPosition(size_t rowNum, size_t colNum);
void setRow(size_t rowNum);
void setCol(size_t colNum);
Position &operator ++ () noexcept;
Position &operator ++ (int) noexcept;
Position &operator -- () noexcept;
Position &operator -- (int) noexcept;
friend bool operator == (const Position &lhs, const Position &rhs) noexcept;
friend std::strong_ordering operator (const Position &lhs, const Position &rhs)
noexcept;
};
};
#endif
Подробнее здесь: https://stackoverflow.com/questions/798 ... ue-is-cont
Мобильная версия