C++ 如何使计数器在不同的cpp文件中生成相同的值
我正在使用来定义我的类型。但是,如果我从main.cpp访问变量C++ 如何使计数器在不同的cpp文件中生成相同的值,c++,templates,C++,Templates,我正在使用来定义我的类型。但是,如果我从main.cpp访问变量sval1,它会得到一个与从test.cpp访问变量不同的\uuuuuu计数器\uuuuu值 如何确保在所有.cpp文件中生成相同的\uuuuu计数器值 template <class TYPE, DWORD CRYPT_KEY> class SVar; struct t_teststruct { SVar<type, __COUNTER__> sval1; } 模板 SVar类; struct
sval1
,它会得到一个与从test.cpp访问变量不同的\uuuuuu计数器\uuuuu
值
如何确保在所有.cpp文件中生成相同的\uuuuu计数器值
template <class TYPE, DWORD CRYPT_KEY>
class SVar;
struct t_teststruct
{
SVar<type, __COUNTER__> sval1;
}
模板
SVar类;
struct t_teststruct
{
SVar-sval1;
}
最佳做法是在需要访问该变量的每个源文件(.cpp)中包含一个头文件(.h)。头文件应将计数器声明为extern
柜台h:
单个源文件应包含变量的实际声明(以及任何所需的初始化)
counter.cpp:
main.cpp:
test.cpp:
这将使我使用它作为一个全局变量。我需要它成为一个预处理器“计数器”哦,如果你在需要编译时知道它,你可以将它定义为一个标志:g++-D_ucounter\uuu=5…
@AustinMullins他说的是。在翻译单元中,每次使用时,它都会自动递增。这整件事有点X-Y问题的味道。你不能在模板参数中使用非常量变量。你想做什么?这看起来很经典。为什么不用0替换它呢?
#ifndef COUNTER_H
#define COUNTER_H
extern int __COUNTER__;
#endif
#include "counter.h"
int __COUNTER__ = 0;
#include "counter.h"
int main() {
// etc.
return 0;
}
#include "counter.h"
struct t_teststruct
{
SVar<type, __COUNTER__> sval1;
}
// etc.
g++ -o test.exe main.o test.o counter.o