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