Рассмотрим следующий класс, который оборачивает контейнер и типа стирания S его тип:оператор == контейнера типа стерта
class C final {
struct B {
virtual bool empty() const noexcept = 0;
};
template<class T, class A>
struct D: public B {
// several constructors aimed to
// correctly initialize the underlying container
bool empty() const noexcept override { return v.empty(); }
private:
std::vector<T, A> v;
};
// ...
public:
//...
bool operator==(const C &other) const noexcept {
// ??
// would like to compare the underlying
// container of other.b with the one
// of this->b
}
private:
// initialized somehow
B *b;
};
Я хотел бы добавить operator==
к классу C
,
Внутренне он должен просто вызвать тот же оператор в базовых контейнерах, но я застрял в этой проблеме, потому что я не знаю, как это сделать.
Идея состоит в том, что два экземпляра C
равны, если operator==
их базовых контейнеров возвращает true
.
Независимо от того, что я пробовал до сих пор, я никогда не мог получить тип одного из двух нижележащих контейнеров, в основном из других.
Есть ли простое решение, которое я не вижу в данный момент, или я должен сдаться?
Пожалуйста, смоделируйте данные правильно (ваши вложенные классы выглядят как вложенные пространства имен) –
Я хотел бы помочь вам, но я бы сказал, что понял, что не так с моим фрагментом. Прости. Он хорошо отформатирован, так что в чем проблема? Я забыл ';', это исправлено. – skypjack
Нам не хватает связи между 'operator ==' и классом, который обертывает контейнер и ... ". 'class C' не имеет контейнеров. – juanchopanza