Boost logo

Boost :

From: Dave Harris (brangdon_at_[hidden])
Date: 2005-10-27 13:19:01

In-Reply-To: <1130423747.22962.246152955_at_[hidden]>
atompkins_at_[hidden] (Andy Tompkins) wrote (abridged):
> I have also realized that (for my purposes) I don't require the
> ability to delete people from a pointer to its base class
> [code skipped]

You might consider having wrap_vector inherit privately from std::vector
and adding using-declarations rather than forwarding functions. I don't
think using composition gains much, given that you are going to inherit
from wrap_vector anyway. Using-declarations would be less code, possibly a
lower abstraction penalty and would avoid problems with tracking exactly
the std vector declarations.

> // overload wrap_vector member functions for different behavior

That's risky, because there is an implicit conversion from people to
wrap_vector<person> and your overloads won't affect the wrap_vector

What I think you really want to do is prevent the derived to base
conversion. It's a shame this doesn't work:

    #include <vector>

    struct Container : public std::vector<int> {
        typedef std::vector<int> base;

        operator base &();
        operator const base &() const;

    void test() {
        Container *p1 = new Container;
        Container::base &p2 = *p1; // Shame this compiles.

Maybe it is worth floating in comp.std.c++.

-- Dave Harris, Nottingham, UK.

Boost list run by bdawes at, gregod at, cpdaniel at, john at