
In-Reply-To: <1130423747.22962.246152955@webmail.messagingengine.com> atompkins@fastmail.fm (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 versions. 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; private: 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.