[英]Integer values in compile time
我必須在具有不同整數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有一個名為__COUNTER__
的(每個文件AFAIK)宏,每次使用后都會增加一個。
請注意,這是擴展,不包含在標准C ++中。
另一個選擇是使用枚舉:
enum {
FIRST = 0,
SECOND,
THIRD
};
或者,您可以使用如下預處理程序指令手動執行此操作:
#define FIRST 0
#define SECOND (1 + FIRST)
#define THIRD (1 + SECOND)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.