私は最近、ファンクターに興奮していて、あちこちでそれらを使用しています。その後、ファンクターに 2 つの異なる操作を実行させる必要がある状況が発生し、ファンクターに別のメソッドを追加する (() 演算子をオーバーロードしない) ことを考えました。これが悪い習慣なのかどうかはわかりませんが (おそらく教えていただけますか)、オブジェクトだけでなく、そもそもなぜファンクターを使用しているのかを考えさせられました。だから私の質問は:
() 演算子のオーバーロードについて特別なことはありますか、それとも通常の名前付きメソッドを使用するよりも構文的に魅力的ですか?
アップデート:
まず、他の質問で説明されているように、ファンクターが関数ポインターよりも望ましい理由を知っています。名前付きメソッドを持つオブジェクトよりもそれらが望ましい理由を知りたいです。
第二に、ファンクターの別の名前のメソッドを使用したい場合の例について: 基本的に、グラフパーティションのモジュール性と呼ばれるものを計算する関数と、compute_modularity()
変更後のモジュール性のゲインを計算する関数の 2 つがありますパーティションのcompute_modularity_gain()
。これらの関数を同じファンクターの一部として最適化アルゴリズムに渡し、名前付き関数としてゲインを使用できると考えました。アルゴリズムに 2 つのファンクターを渡すだけではない理由は、別のファンクターとの組み合わせでのみ使用され、別のファンクターでは使用されないことを強制したいからですcompute_modularity_gain()
。compute_modularity()
compute_stability()
compute_stability_gain()
. つまり、ゲイン関数はその兄弟関数と密接に結合されている必要があります。この制約を強制する別の方法がある場合は、お知らせください。