J'ai un certain nombre d'algorithmes pour la détection de communauté sur les graphiques que je veux maintenant visualiser. Cette visualisation nécessite de "détourner" ces algorithmes pendant qu'ils exécutent et enregistrent ce qu'ils font. Spécifiquement cela signifiera passer une référence à un std::vector<graph_partition>
comme argument à ces algorithmes, et ajouter à ce vecteur pendant que l'algorithme continue.Gérer efficacement les fonctions (logging/non-logging) légèrement différentes
Par conséquent, pour chaque algorithme (qui sont généralement juste des fonctions), je devrais ajouter un autre argument pour le &std::vector<graph_partition>
, et une ou deux lignes de code pour la journalisation.
Je ne veux pas toujours/besoin de se connecter cependant, et ainsi de le faire de manière intelligente s'est avéré non-trivial. J'ai pensé:
- Rédiger les versions de journalisation distinctes de chaque algorithme: Le problème est ici que je vais me répéter massivement, puisque 95% des diagraphie et les fonctions non-exploitation forestière sera le même. Vous pourriez dire que mon code devrait être si modulaire qu'aucune répétition ne devrait se produire, mais en pratique, à moins d'avoir beaucoup de petites fonctions triviales, je devrais me répéter.
- Avoir une seule fonction avec un argument conditionnel pour décider s'il faut se connecter ou non: Le problème est que puis-je passer pour
&std::vector<graph_partition>
quand je ne veux pas l'utiliser? Aussi (probablement minuscule) coup d'exécution de l'évaluation continue conditionnelle. - Quelques magies de macro: Les macros sont un peu maléfiques et préfèreraient les éviter si possible.
- Connectez-vous par défaut, ignorez si je n'en ai pas besoin: Pratique mais inutile, à la fois en termes d'autonomie et d'espace.
Des idées ou des réflexions à ce sujet seraient appréciées. Passez un pointeur vers une classe de consignation parent pour chaque fonction.
Ou peut-être que je pourrais utiliser des modèles variés, cela pourrait être intéressant? – zenna
Ai-je bien compris, que vous passez la fonction/l'objet de journalisation en tant que paramètre? – Xeo
Eh bien, je n'ai encore rien fait. En enregistrant, je veux dire simplement passer dans le vecteur en tant que paramètre et l'ajouter à la fonction. – zenna