【发布时间】:2023-03-16 11:12:01
【问题描述】:
我正在尝试定义一个随着我项目的所有源文件增加的宏。与 __COUNTER__ 宏不同,它对所有文件都是独立的。
我尝试在类中使用静态成员变量,例如:
class A{
static int GetNextNum() {
number++;
return number - 1;
}
private:
static int number;
};
#define NEXT_NUM A::GetNextNum()
但结果不是我想要的。例如,我希望在这个循环中的每次迭代都有相同的数字(就像__COUNTER__ 一样):
for (int i = 0; i < 10; ++i) {
doSomething(NEXT_NUM)
}
虽然我已经实施了它,但它在每次迭代中都会增加。关于如何实现我需要的任何想法? (我正在使用 Visual Studio,但更喜欢独立于编译器的解决方案)。
编辑:按照这里的要求,这是一个类似于我想做的事情的简约示例。我尝试定义一个类来计算我通过代码的给定部分的次数。以下是我将如何使用这样的类:
for (int i = 0; i < 10; ++i) {
ExecuteCounter(location_id);
... do stuff ...
}
我还在析构函数中记录并积累了大量其他内容,但我相信这足以让您了解这个想法。起初,我使用了一个映射,其中 entry 是一个对象,我在其中存储我关心的信息,字符串是通过将__FILE__ 与__LINE__ 附加来形成的(从而唯一地标识了位置),但事实证明这很慢。因此,我决定在其中使用表格和索引,而不是使用地图。这将从整体复杂性中去除对数并显着提高性能。希望这个解释能让我的问题更清楚。
【问题讨论】:
-
我正在为我创建的代码中的每个位置创建一个单独的类实例。我通过使用将索引('COUNTER')映射到实际对象的表来实现这一点。除此之外,我也是出于好奇。
-
请发布您要解决的问题的最小、完整示例。 必须有更好的方法。