3

stl クラスから継承するのは悪い考えであることはわかっています。しかし、それらを拡張する他の方法はありますか?

読みやすさを向上させるために、読みにくい「push_back」の代わりに、ベクターで「add」メソッドを呼び出せるようにしたいとしましょう。

あるいは、単純な hasKey メソッドを std::map に追加したいと思うかもしれません。

メンバーとして std::vector を使用してラッパー クラス全体を作成し、各関数呼び出しをラッパーからベクターに渡す以外に、それを行う方法はありますか?

4

2 に答える 2

14

無料の関数を使用する必要があります。

template<typename... Args>
bool has_key(std::map<Args...> const& map, typename std::map<Args...>::key_type key) {
  return map.find(key) != map.end();
}

継承が必要ない場合は、継承を使用しないでください。それはばかげている。

于 2013-06-04T21:12:24.683 に答える
3

開発者が STL 名に慣れると、それらを変更するとコードの保守性が低下します。これは一般的に悪い考えです。実際には、STL クラスは仮想デストラクタを提供しないため、それらを継承して適切な破壊動作を行うことはできません。

于 2013-06-04T21:10:54.203 に答える