mardi 2 février 2016

operator== of a type erased container

Consider the following class that wraps a container and type-erases its type:

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;
};

I'd like to add the operator== to the class C.
Internally, it should simply invoke the same operator on the underlying containers, but I'm stuck on this problem, for I don't know how to do that.
The idea is that two instances of C are equal if the operator== of their underlying containers return true.

Whatever I've tried till now, I ever ended up being unable to get the type of one of the two underlying containers, mainly the one of other.
Is there an easy solution I can't see at the moment or I should give up?

Aucun commentaire:

Enregistrer un commentaire