クラス設計に関するいくつかの事実、具体的には関数がメンバーであるべきかどうかについて戸惑いながら、私はEffective c++を調べて、アイテム23、つまりメンバー関数よりも非メンバー非フレンド関数を優先することを見つけました。Web ブラウザーの例で最初にそれを読むと、ある程度の意味がありましたが、その例の便利な関数 (本ではこのような非メンバー関数と呼ばれます) はクラスの状態を変更しますよね?
それでは、最初の質問です。
もう少し読んで、彼は STL 関数を検討します。実際、一部のクラスで実装されていない一部の関数は stl で実装されています。
std::sort
本のアイデアに従って、それらは、std::copy
fromなどのいくつかの合理的な名前空間にパックされたいくつかの便利な関数に進化しますalgorithm
。たとえば、vector
クラスには関数がなくsort
、stlsort
関数を使用するため、ベクトル クラスのメンバーではありません。assign
しかし、メンバーとしてではなく便利な関数として実装できるように、同じ推論をベクトルクラスの他の関数に拡張することもできます。ただし、それは操作対象のソートなどのオブジェクトの内部状態も変更します。では、この微妙だが重要な (私が推測する) 問題の背後にある理論的根拠は何でしょうか。
もしあなたがその本にアクセスできるなら、これらの点をもう少し明確にしてもらえますか?