Если я унаследую класс, то все его методы принмающие себеподбный класс перестанут быть корректными для наследника. Для примера операторы становятся не используемыми.
Как лучше это решается, можно ли без переписывания и переобъявления методов? Может с учетом новых с++2z?
===
UPD: Не, не работает. Например:
struct A {
int a = 0;
A() {}
A(int _a) : a(_a) {}
bool operator<(const A& other) const { return a < other.a; }
A operator+(const A& other) const { return A(a + other.a); }
};
namespace std {
template <> struct hash<A> {
std::size_t operator()(const A& o) const { return hash<int>()(o.a); }
}; }
struct B: public A {
void methodOfB() const {}
};
B b1(1);
B b2(2);
(b1 + b2).methodOfB(); // <== ERROR
std::unordered_map<A,int> mapA; // normal
std::unordered_map<B,int> mapB; // <== ERROR