[解決済み】汝、std::vector を継承してはならない。
質問
さて、告白するのは難しいのですが、現在、私は
std::vector
.
ベクター用にカスタマイズされたアルゴリズムが10個ほど必要で、それらを直接ベクターのメンバーとして使いたいのです。しかし、当然ながら、私は残りの
std::vector
のインターフェイスになります。さて、遵法精神に富む私の最初のアイデアは
std::vector
のメンバーを
MyVector
クラスがあります。しかし、そうなるとstd::vectorのインターフェイスを全て手動で再提示しなければならなくなります。タイプする量が多すぎる。次に、プライベート継承を考えて、メソッドを再提供する代わりに、たくさんの
using std::vector::member
をpublicセクションに配置しました。これも実は面倒なんです。
そしてここで私は、本当に単純にパブリックに
std::vector
しかし、このクラスはポリモーフィックに使ってはいけないという警告をドキュメントに記述しています。ほとんどの開発者は、このクラスがとにかくポリモーフィックに使われるべきではないことを理解するのに十分な能力があると思います。
私の判断は絶対に正当化されないのでしょうか?もしそうなら、なぜですか?次のような代替案を提示できますか? 実際に のメンバーでありながら、vector のインターフェイスをすべて再入力する必要はないのでしょうか?私はそれを疑うが、あなたができる場合、私はちょうど幸せだ。
また、どこかのバカがこんなことを書くのはともかくとして
std::vector<int>* p = new MyVector
はないでしょうか? 現実的 MyVectorを使用することの危険性?現実的というのは、vectorへのポインタを取る関数を想像してください......というようなことは除外します。
さて、私は自分の主張を述べました。私は罪を犯しました。あとは許すか許さないか、あなた次第です :)
解決方法は?
の公開継承は、実は何の問題もありません。
std::vector
. 必要ならそうすればいいだけです。
である場合のみ、そうすることをお勧めします。 本当に 必要です。自由な関数でやりたいことができない場合のみです(例えば、ある状態を維持する必要がある)。
問題なのは
MyVector
は新しいエンティティです。新しいC++の開発者は、それが一体何であるかを知ってから使うべきだということです。とは何が違うのでしょうか?
std::vector
と
MyVector
? あちこちで使うにはどっちがいい?を移動する必要がある場合はどうすればよいですか?
std::vector
から
MyVector
? を使うだけでいいですか?
swap()
を使うかどうか?
見栄えをよくするために、新しいエンティティを作らないこと。これらのエンティティは(特に、そのような一般的な)真空中で生きるつもりはありません。常にエントロピーが増大するような環境の中で生きていくことになるのです。
関連
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】ベクトルからサブベクトルを抽出する最適な方法とは?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] std::vector にある項目が存在するかどうかを調べるには?
-
[解決済み] std::vectorをハードコードされた要素で初期化する最も簡単な方法は何ですか?
-
[解決済み] std::vector<> からインデックスで要素を消すにはどうしたらいいですか?
-
[解決済み] std::vector に対する反復処理: 符号なしインデックス変数と符号ありインデックス変数の比較
-
[解決済み] C++におけるstd::vectorとstd::arrayの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】C++の余分な資格エラー
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] なぜList<T>を継承しないのですか?