我必须在不同的文件中用一些整数 id 写一些常量。例如:
#define MESSAGE_FIRST 0
在其他文件中:
#define MESSAGE_ANOTHER 1
有什么方法可以在编译时自动获取该 ID?就像是:
#define MESSAGE_AUTO GetNextId()
我不能在这里使用枚举,因为这个指令将在不同的文件中。
谢谢。
ps GCC, Linux
我必须在不同的文件中用一些整数 id 写一些常量。例如:
#define MESSAGE_FIRST 0
在其他文件中:
#define MESSAGE_ANOTHER 1
有什么方法可以在编译时自动获取该 ID?就像是:
#define MESSAGE_AUTO GetNextId()
我不能在这里使用枚举,因为这个指令将在不同的文件中。
谢谢。
ps GCC, Linux
您可以使用继承和函数重载进行编译时计数器:
template<unsigned int n> struct Count { bool data[n]; };
template<int n> struct Counter : public Counter<n-1> {};
template<> struct Counter<0> {};
Count<1> GetCount(Counter<1>);
#define MAX_COUNTER_NUM 64
#define COUNTER_VALUE (sizeof(GetCount(Counter<MAX_COUNTER_NUM + 1>())) / sizeof(bool))
#define INC_COUNTER Count<COUNTER_VALUE + 1> GetCount(Counter<COUNTER_VALUE + 1>);
您可以在这里看到它的实际效果。也适用于 msvc。
你说你正在使用GCC。GCC 有一个(AFAIK per-file)宏调用__COUNTER__
,每次使用后递增一。
请注意,这是一个扩展,不包含在标准 C++ 中。
另一种选择是使用枚举:
enum {
FIRST = 0,
SECOND,
THIRD
};
或者您可以使用如下预处理器指令手动执行此操作:
#define FIRST 0
#define SECOND (1 + FIRST)
#define THIRD (1 + SECOND)