Re: avoid inheritance from std::map
On Dec 16, 1:56 am, Kai-Uwe Bux <jkherci...@gmx.net> wrote:
[...]
By and large, that leaves only two reasonable
scenarios for inheritance:
a) For convenience by extending the interface. Here, free
standing functions are usually better.
Usually doesn't mean always. I don't derive from a standard
container that often, but when I do, the most frequent reason is
to add constructors, i.e. a pre-filled vector or map. (Usually,
it's quite adequate to use the two iterator constructor of the
container, copying some array of POD-types into the container,
possibly with an implicit conversion. But deriving provides the
ultimate flexibility, supporting algorithmic initialization.)
b) As a way to distingush types. E.g., one could define
template < typename ArithmeticType >
struct linalg_vector : public std::vector< ArithmeticType > {
// some constructors
};
template < typename LetterType >
struct word : public std::vector< LetterType > {
// some constructor
};
The nice thing is that now one could overload operator+ to
mean elementwise addition for linalg_vector and concatenation
for word.
Conceptually, the correct solution here is to use containment,
and redefine the interface in the containing class.
Practically, I don't know if it's really worth all that extra
work.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34