あなたはstd :: vectorから継承しないでください
わかりました、これを告白するのは本当に難しいですが、私は現在、から継承する強い誘惑がありstd::vectorます。 ベクター用に約10のカスタマイズされたアルゴリズムが必要であり、それらを直接ベクターのメンバーにしたい。しかし当然ながら、の残りstd::vectorのインターフェイスも必要です。さて、私の最初のアイデアは、法律を遵守する市民std::vectorとして、MyVectorクラスにメンバーを含めることでした。しかし、私はすべてのstd :: vectorのインターフェースを手動で再提供する必要があります。入力するには多すぎます。次に、私はプライベート継承について考えました。そのため、メソッドを再提供する代わりusing std::vector::memberに、パブリックセクションにをまとめて記述します。これも実際には退屈です。 そして、私は実際に、私は単純にからパブリックに継承できると本当に思っていますがstd::vector、このクラスは多態的に使用されるべきではないという警告をドキュメントに提供しています。ほとんどの開発者は、これを多態的に使用してはならないことを理解するのに十分な能力があると思います。 私の決定は完全に不当なものですか?もしそうなら、なぜですか?追加のメンバーが実際にはメンバーになるが、ベクターのすべてのインターフェースを再入力する必要がない代替案を提供できますか?疑わしいですが、できれば幸せです。 また、一部の馬鹿が次のようなものを書くことができるという事実は別として std::vector<int>* p = new MyVector MyVectorを使用する上で他の現実的な危険はありますか?現実的と言うことで、ベクトルへのポインタを受け取る関数を想像するようなものを破棄します... さて、私は私のケースを述べました。私は罪を犯しました。今私を許すかどうかはあなた次第です:)