Если у меня есть тип, состоящий из одного элемента числовых данных (например, int
) и различных методов, есть ли удобный способ сказать компилятору автоматически генерировать все очевидные операторы сравнения?
I.e., вместо этого (конечно, используя inline
вместо constexpr
для С++ 03):
class MyValueType
{
private:
int myvalue;
public:
constexpr bool operator<(MyValueType rhs) const { return myvalue < rhs.myvalue; }
constexpr bool operator>(MyValueType rhs) const { return myvalue > rhs.myvalue; }
constexpr bool operator>=(MyValueType rhs) const { return myvalue >= rhs.myvalue; }
constexpr bool operator==(MyValueType rhs) const { return myvalue == rhs.myvalue; }
/// .... etc
}
Я хочу что-то вроде Ruby Comparable mixin, которое в принципе позволяет вам определить одного оператора и позволить Ruby позаботиться об остальном. И я бы даже предположил, что версии с компилятором, вероятно, будут лучше, чем мои: должен ли rhs
быть const
ref для каждого случая? Должен ли я определять версии, которые пересылают ссылки? Что, если я забуду одного из операторов? Etc.
Итак... что-то вроде этого существует?
(Пожалуйста, простите меня, если это дубликат, я предположил, что кто-то уже спросил об этом где-то, потому что это похоже на очевидную возможность, но я не могу найти.)
EDIT: В качестве функции предлагается автоматическая генерация операторов сравнения: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3950.html