Ok, esto es realmente difícil de confesar, pero tengo una fuerte tentación en este momento para heredar std::vector
.
Necesito unos 10 algoritmos personalizados para el vector y quiero que sean directamente miembros del vector. Pero, naturalmente, también quiero tener el resto de std::vector
la interfaz. Bueno, mi primera idea, como ciudadano respetuoso de la ley, era tener un std::vector
miembro en MyVector
clase. Pero luego tendría que volver a proporcionar manualmente toda la interfaz std :: vector. Demasiado para escribir. Luego, pensé en la herencia privada, de modo que en lugar de proporcionar métodos, escribiría un montón de using std::vector::member
's en la sección pública. Esto es tedioso también en realidad.
Y aquí estoy, realmente creo que simplemente puedo heredar públicamente std::vector
, pero dar una advertencia en la documentación de que esta clase no debe usarse polimórficamente. Creo que la mayoría de los desarrolladores son lo suficientemente competentes como para entender que esto no debería usarse polimórficamente de todos modos.
¿Es mi decisión absolutamente injustificable? Si es así, ¿por qué? ¿Puede proporcionar una alternativa que tendría los miembros adicionales en realidad miembros pero que no implicaría volver a escribir toda la interfaz del vector? Lo dudo, pero si puedes, seré feliz.
Además, aparte del hecho de que algún idiota puede escribir algo como
std::vector<int>* p = new MyVector
¿Hay algún otro peligro realista al usar MyVector? Al decir realista, descarto cosas como imaginar una función que toma un puntero para vectorizar ...
Bueno, he declarado mi caso. He pecado. Ahora depende de ti perdonarme o no :)
std::vector
La interfaz de @Jim: es bastante grande, y cuando aparezca C ++ 1x, se expandirá considerablemente. Eso es mucho para escribir y más para expandirse en unos pocos años. Creo que esta es una buena razón para considerar la herencia en lugar de la contención, si se sigue la premisa de que esas funciones deberían ser miembros (lo cual dudo). La regla para no derivar de los contenedores STL es que no son polimórficos. Si no los está utilizando de esa manera, no se aplica.