我必須用一些整數ID在不同的文件中編寫一些常量。例如:編譯時的整數值
#define MESSAGE_FIRST 0
在其他的文件:
#define MESSAGE_ANOTHER 1
任何方式來自動獲取該id在編譯的時候?例如:
#define MESSAGE_AUTO GetNextId()
我不能在這裏使用枚舉,因爲這個指令將在不同的文件中。
謝謝。
p.s. GCC,Linux
我必須用一些整數ID在不同的文件中編寫一些常量。例如:編譯時的整數值
#define MESSAGE_FIRST 0
在其他的文件:
#define MESSAGE_ANOTHER 1
任何方式來自動獲取該id在編譯的時候?例如:
#define MESSAGE_AUTO GetNextId()
我不能在這裏使用枚舉,因爲這個指令將在不同的文件中。
謝謝。
p.s. 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>);
你可以看到它在行動here。也適用於msvc。
你說你在使用GCC。 GCC具有名爲__COUNTER__
的(AFAIK每個文件)宏,每次使用後都會增加1。
請注意,這是一個擴展,不包含在標準C++中。
另一種選擇是使用枚舉:
enum {
FIRST = 0,
SECOND,
THIRD
};
或者你也可以做到這一點使用手動預處理器指令是這樣的:
#define FIRST 0
#define SECOND (1 + FIRST)
#define THIRD (1 + SECOND)
該標準沒有類似\ _ \ _ COUNTER \ _ \ _(類似於\ _ \ _ LINE \ _ \ _)AFAIK。附:在我自己的預處理器中,我有這個。 –
我想不出有什麼辦法可以在外部代碼生成之外做到這一點。但是,如果您對您正在嘗試解決的實際問題進行更全面的描述,我們可以爲您提供更好的解決方案。 –
他們必須在不同的文件?或者他們都可以包含一個包含這些值的頭文件? – Matt