Ok, isso é realmente difícil de confessar, mas eu tenho uma forte tentação no momento de herdar std::vector
.
Preciso de cerca de 10 algoritmos personalizados para vetor e quero que eles sejam diretamente membros do vetor. Mas, naturalmente, também quero ter o restante da std::vector
interface. Bem, minha primeira idéia, como cidadão cumpridor da lei, era ter um std::vector
membro da MyVector
classe. Mas então eu teria que reprovar manualmente toda a interface do std :: vector. Demais para digitar. Em seguida, pensei em herança privada, para que, em vez de reprovar métodos, eu escrevesse um monte de using std::vector::member
's na seção pública. Isso é tedioso também, na verdade.
E aqui estou eu, realmente acho que posso simplesmente herdar publicamente std::vector
, mas forneço um aviso na documentação de que essa classe não deve ser usada polimorficamente. Eu acho que a maioria dos desenvolvedores é competente o suficiente para entender que isso não deve ser usado polimorficamente de qualquer maneira.
Minha decisão é absolutamente injustificável? Se sim, por quê? Você pode fornecer uma alternativa que teria membros adicionais na verdade membros, mas não envolveria redigitar toda a interface do vetor? Duvido, mas se puder, serei feliz.
Além disso, além do fato de que algum idiota pode escrever algo como
std::vector<int>* p = new MyVector
existe algum outro perigo realista no uso do MyVector? Ao dizer realista, descarto coisas como imaginar uma função que leva um ponteiro para o vetor ...
Bem, eu declarei o meu caso. Eu pequei. Agora cabe a você me perdoar ou não :)
std::vector
A interface do @ Jim: é bastante grande e, quando o C ++ 1x aparecer, ele se expandirá bastante. É muito para digitar e mais para expandir em alguns anos. Penso que esta é uma boa razão para considerar herança em vez de contenção - se alguém seguir a premissa de que essas funções devem ser membros (o que duvido). A regra para não derivar de contêineres STL é que eles não são polimórficos. Se você não os estiver usando dessa maneira, não se aplicará.