Я определил класс IntWrapper
следующим образом:
struct IntWrapper
{
protected:
int value;
public:
explicit IntWrapper() = default;
explicit IntWrapper(const int value) : value(value) {}
bool operator< (const IntWrapper rhs) const { return value < rhs.value; }
bool operator> (const IntWrapper rhs) const { return value > rhs.value; }
bool operator<=(const IntWrapper rhs) const { return value <= rhs.value; }
bool operator>=(const IntWrapper rhs) const { return value >= rhs.value; }
bool operator==(const IntWrapper rhs) const { return value == rhs.value; }
explicit operator int() const { return value; }
};
и классы Foo
и Bar
которые наследуются от IntWrapper
struct Foo: IntWrapper
{
using IntWrapper::IntWrapper;
};
struct Bar: IntWrapper
{
using IntWrapper::IntWrapper;
};
Я хотел бы сравнить только объекты одного типа. Другими словами, я хотел бы, чтобы следующий фрагмент дал ошибку компиляции вместо того, чтобы отбрасывать foo
и bar
в IntWrapper
.
const Foo foo(1);
const Bar bar(2);
bool b = foo >= bar;
Поскольку у меня есть много других объектов, таких как Foo
и Bar
, каким-либо образом достичь моего результата, сохраняя все операторы сравнения внутри IntWrapper
?