我有许多用于在图上进行社区检测的算法,现在我想将它们可视化。这种可视化要求我“劫持”这些算法,同时它们执行并记录它们正在做什么。具体来说,这意味着将对 a 的引用std::vector<graph_partition>
作为参数传递给这些算法,并在算法进行时附加到该向量。
因此,对于每个算法(通常只是函数),我需要为 , 添加一个进一步的参数&std::vector<graph_partition>
,并为日志添加一两行代码。
但是,我并不总是想要/需要记录,因此以智能方式执行此操作已被证明并非易事。我曾想过:
- 为每个算法编写单独的日志记录版本:这里的问题是我会大量重复自己,因为 95% 的日志记录和非日志记录函数将是相同的。你可以说我的代码应该是模块化的,以至于不应该发生重复,但在实践中,除非我有很多微小的琐碎函数,否则我将不得不重复自己。
- 有一个带有条件参数的函数来决定是否记录:问题是
&std::vector<graph_partition>
当我不想使用它时我传递了什么?此外(可能是微不足道的)持续评估条件的运行时影响。 - 一些宏魔法:宏有点邪恶,如果可能的话,宁愿避免使用它们。
- 默认情况下只记录,如果我不需要它就丢弃:方便但浪费,无论是在运行时间还是空间方面。
任何关于这些的想法或想法将不胜感激。