Ich habe einen Optimierungsalgorithmus, der die beste Partition eines Graphen findet.Besseres Design für die Verwendung von Funktionszeigern mit variierenden Argumenten
Es gibt viele Maßnahmen für die Qualität einer Partition (die Variable wird optimiert), also dachte ich, es wäre eine gute Idee, Funktionszeiger zu diesen Qualitätsfunktionen zu verwenden und diese in meine Optimierungsalgorithmusfunktion zu übergeben.
Das funktioniert gut, aber das Problem ist, verschiedene Qualitätsfunktionen nehmen einige verschiedene Argumente.
Zum Beispiel eine Qualitätsfunktion ist find_linearised_stability
und es erfordert eine markov_time
Parameter:
float find_linearised_stability(cliques::Graph<T> &my_graph, cliques::Partition &my_partition,
std::vector<float> &markov_times, std::vector<float> &stabilities)
und wird in der Optimierungsfunktion verwendet:
cliques::find_optimal_partition_louvain(my_new_graph, markov_times, &cliques::find_linearised_stability);
jedoch eine andere Qualität Funktion find_modularity
erfordert keine markov_time Parameter. Natürlich könnte ich es einfach als Argument verwenden und es nicht in der Funktion verwenden, aber das scheint eine schlechte Übung zu sein, und würde unhandlich werden, sobald ich anfange, viele verschiedene Qualitätsfunktionen hinzuzufügen.
Was ist ein besseres Design für diese Art von Situation?
Ok, aber dann, welche Art für die Funktion Objekt kann ich verwenden, wenn die Cliquen erklärt :: find_optimal_partition_louvain Funktion? – zenna
@zenna - Machen Sie es zu einer Funktionsvorlage, siehe zum Beispiel aktualisierte Antwort. –
@zenna - Beachten Sie, dass Sie dadurch auch reguläre Funktionen weitergeben können, wenn Sie herumliegen, wenn Sie nicht in Funktionsobjektklassen umgewandelt werden möchten. –