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

时间:2015-02-12 03:48:47

标签: c++ templates

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

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

template <class TYPE, DWORD CRYPT_KEY> 
class SVar;

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

1 个答案:

答案 0 :(得分:0)

最佳做法是在每个需要访问该变量的源文件(.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