如何使 __COUNTER__ 在不同的 cpp 文件中生成相同的值

how to make __COUNTER__ to generate the same value across different cpp files

我正在使用 predefined __COUNTER__ macro 来定义我的类型。但是,如果我从 main.cpp 访问变量 sval1,它得到的 __COUNTER__ 值与我从 test.cpp.

访问它时得到的值不同

如何确保在所有 .cpp 文件中为 __COUNTER__ 生成相同的值?

template <class TYPE, DWORD CRYPT_KEY> 
class SVar;

struct t_teststruct
{
    SVar<type, __COUNTER__> sval1;
}

最佳做法是在每个需要访问该变量的源文件 (.cpp) 中包含一个头文件 (.h)。头文件应将计数器声明为 extern.

counter.h:

#ifndef COUNTER_H
#define COUNTER_H
  extern int __COUNTER__;
#endif

单个源文件应包含变量的实际声明(以及任何所需的初始化)。

counter.cpp:

#include "counter.h"
int __COUNTER__ = 0;

main.cpp:

#include "counter.h"

int main() {
    // etc.
    return 0;
}

test.cpp:

#include "counter.h"

struct t_teststruct
{
    SVar<type, __COUNTER__> sval1;
}

// etc.

每个源文件都应该单独编译。然后可以将最终的可执行文件链接到 counter 目标文件:

g++ -o test.exe main.o test.o counter.o