2009-03-30 18 views
2

さまざまなパラメータを取得するために、find、erase、およびinsertなどのメソッドに対してSTL実装をオーバーロードするにはどうすればよいですか?私はSTLメソッドのオーバーロードを調べようとしましたが、何の助けも見つかりませんでした。C++ STLメソッドのオーバーロード

+0

あなたは_do_オーバーロードを意味しますか? std :: for_each(iter1、iter2、fc)のように?あるいは、vector :: find、map :: eraseなどのように、オーバーライドについて話していますか? – xtofl

+0

おそらくC++標準ライブラリを意味し、STLは意味しません。 –

答えて

11

クラスのメソッドをオーバーライドすることはできません。そのクラスのコードを編集しないでください。

ヘルパーとして機能する独自の無料機能を作成します。関連するコンテナクラスを最初のパラメータとして使用します。

クラスから継承してメソッドを追加することはできますが、stdコンテナクラスは継承されるようには設計されていません。

+0

説明:非仮想dtorをベースにポインタを介して派生オブジェクトを破棄することは、厳密にUBです。そして、stdコンテナクラスはvtableを必要としないので、非仮想dtorsを持っています。 STLは静的な多形性のために設計されているので、提案された解決策は[...] –

+0

[..]ベクトルと同じコンセプトに従うクラスを作成し、そのインスタンスを関数テンプレートに渡すだけです。これが実用的かどうかは議論の余地がある。 –

+1

それは私の提案ではありません! :) –

3

std名前空間にオーバーロードを追加することはできません。独自のデータ型の関数とアルゴリズムの特殊化のみが可能です。別の検索、消去、挿入をしたい場合は(標準の名前空間から)ラッパーを実装して使用してください。

また、私はそれをお勧めしません。どんな種類のオーバーロードを提供したいですか?

+0

それぞれ異なる型のカスタム引数を持つ – Elroy

1

これは許可されていません。規格はそれを禁止している。

関連する問題