Ok, c'est vraiment difficile à avouer, mais j'ai une forte tentation en ce moment d'hériter std::vector
.
J'ai besoin d'environ 10 algorithmes personnalisés pour le vecteur et je veux qu'ils soient directement membres du vecteur. Mais naturellement je veux aussi avoir le reste de std::vector
l'interface de. Eh bien, ma première idée, en tant que citoyen respectueux des lois, était d'avoir un std::vector
membre en MyVector
classe. Mais alors je devrais réorganiser manuellement toute l'interface de std :: vector. Trop à taper. Ensuite, j'ai pensé à l'héritage privé, de sorte qu'au lieu de réapprovisionner les méthodes, j'écrirais un tas de using std::vector::member
's dans la section publique. C'est trop ennuyeux en fait.
Et me voici, je pense vraiment que je peux simplement hériter publiquement de std::vector
, mais fournissez un avertissement dans la documentation que cette classe ne doit pas être utilisée de manière polymorphe. Je pense que la plupart des développeurs sont suffisamment compétents pour comprendre que cela ne devrait de toute façon pas être utilisé de manière polymorphe.
Ma décision est-elle absolument injustifiable? Si oui, pourquoi? Pouvez-vous fournir une alternative qui aurait les membres supplémentaires réellement membres mais n'impliquerait pas de retaper toute l'interface du vecteur? J'en doute, mais si vous le pouvez, je serai juste heureux.
Aussi, mis à part le fait qu'un idiot peut écrire quelque chose comme
std::vector<int>* p = new MyVector
y a-t-il un autre danger réaliste à utiliser MyVector? En disant réaliste, je rejette des choses comme imaginer une fonction qui prend un pointeur vers le vecteur ...
Eh bien, j'ai exposé mon cas. J'ai pêché. Maintenant c'est à vous de me pardonner ou pas :)
std::vector
est assez énorme, et quand C ++ 1x arrive, il va considérablement s'étendre. C'est beaucoup à taper et plus à développer dans quelques années. Je pense que c'est une bonne raison d'envisager l'héritage plutôt que le confinement - si l'on part du principe que ces fonctions devraient être des membres (ce dont je doute). La règle pour ne pas dériver des conteneurs STL est qu'ils ne sont pas polymorphes. Si vous ne les utilisez pas de cette façon, cela ne s'applique pas.