私はグラフの最適なパーティションを見つける最適化アルゴリズムを持っています。さまざまな引数を持つ関数ポインタを使用するためのより良い設計
パーティションの品質(最適化される変数)には多くの措置があるため、これらの品質関数への関数ポインタを使用して最適化アルゴリズム関数に渡すことをお勧めします。
これはうまくいきますが、問題は異なる品質関数がいくつかの異なる引数を取ることです。
例えば1つの品質関数は、find_linearised_stability
であり、それはmarkov_time
パラメータを必要とする:
float find_linearised_stability(cliques::Graph<T> &my_graph, cliques::Partition &my_partition,
std::vector<float> &markov_times, std::vector<float> &stabilities)
及び最適化関数で使用される:
cliques::find_optimal_partition_louvain(my_new_graph, markov_times, &cliques::find_linearised_stability);
しかし、別の品質関数
find_modularity
にはmarkov_timeパラメータを必要としません。もちろん、それを引数として含めることはできますが、関数内で使用することはできませんが、それは悪い習慣のように思えますし、いろいろな質の関数を追加し始めたら扱いにくくなります。
このような状況に適したデザインは何ですか?
[OK]をしかし、その後クリーク:: find_optimal_partition_louvain関数を宣言するときに私が使うのです関数オブジェクトのためのどのタイプ? – zenna
@zenna - それを関数テンプレートにします。たとえば、更新された答えを見てください。 –
@zenna - 関数オブジェクトクラスに変換したくないと思っている人がいれば、通常の関数を渡すこともできます。 –