摘要:我正在尝试查看是否可以重构一些具有常规模式的 C++ 代码,以使其更易于更新和维护。
详情:
我有一些代码可以创建线程本地计数器以在程序执行期间跟踪统计信息。目前,当向源代码添加统计信息时,需要更新 5 项内容:计数器线程本地声明、计数器总数声明、重置线程计数器的函数、将线程计数器添加到总数的函数、和打印功能。
代码如下所示:
// Adding a statistic named 'counter'
// Declaration of counter
__thread int counter = 0;
int total_counter = 0;
// In reset function
counter = 0;
// In add function
total_counter += counter;
// In print function
printf("counter value is: %d\n", total_counter);
我可以看到如何为计数器的声明创建一个宏,如下所示:
#define STAT(name) __thread int name; \
int total_##name;
但我还没有想过如何扩展它来更新add
andreset
函数。理想情况下,我想输入类似STAT(counter)
的内容并处理所有用于管理统计信息的声明和功能。
编辑:
我已经有用于更新代码中的统计信息的宏。诸如此类的东西STAT_INC(counter)
会增加本地计数器的值。然后,当线程完成执行时,它的线程本地值被添加到总体总数中。因此,每个统计数据的名称都很重要,这就是为什么数组对我不起作用的原因。因为真正的计数器名称是cache_hit
比这些更有意义的东西counter[2]
,我不想失去为所创建的统计信息指定任意名称的能力。如果可能的话,只是为了简化我在声明统计信息时必须编写的代码量。