グラフでコミュニティを検出するためのアルゴリズムがいくつかあり、それらを視覚化したいと考えています。このビジュアライゼーションでは、これらのアルゴリズムを実行してログに記録する間、これらのアルゴリズムを「ハイジャック」する必要があります。具体的には、std::vector<graph_partition>
これらのアルゴリズムへの引数として a への参照を渡し、アルゴリズムが進行するにつれてそのベクトルに追加することを意味します。
したがって、各アルゴリズム (通常は単なる関数) に、 の引数と&std::vector<graph_partition>
、ログ記録用の 1 ~ 2 行のコードを追加する必要があります。
ただし、常にログを記録したい/必要があるとは限らないため、これをインテリジェントな方法で行うことは自明ではありません。私は考えました:
- 各アルゴリズムの個別のロギング バージョンを作成する:ここでの問題は、ロギング機能と非ロギング機能の 95% が同じであるため、何度も繰り返すことになることです。私のコードは繰り返しが発生しないようにモジュール化する必要があると言えますが、実際には、小さな些細な関数がたくさんない限り、自分自身を繰り返さなければなりません。
- ログに記録するかどうかを決定する条件付き引数を持つ単一の関数があります
&std::vector<graph_partition>
: 問題は、使用したくない場合に何を渡すかです。また、条件を継続的に評価することによる (おそらくごくわずかな) ランタイム ヒット。 - いくつかのマクロの魔法: マクロは少し悪質で、できれば避けたいものです。
- デフォルトでログに記録し、不要な場合は破棄します。便利ですが、ランタイムとスペースの両方の点で無駄です。
これらに関するアイデアや考えをいただければ幸いです。