無法弄清楚這是怎麼回事。這是我想要做的一個例子。傳遞參數時出現宏展開問題
class WhatThe
{
public:
WhatThe(std::string Type, int channel) {}
~WhatThe() {}
void Doitnow() {}
};
#define DO_SOMETHING_TEST1 WhatThe("TEST1", channel)
#define DO_SOMETHING_TEST2 WhatThe("TEST2", channel)
#define DO_IT(type, channel) \
DO_SOMETHING_##type.Doitnow()
然後調用
DO_IT(TEST1,1);
我得到一個 - 錯誤:「通道」在此範圍
未聲明是我甚至可以做的,你可以有內宏宏並通過它們傳遞參數?我本來以爲
DO_SOMETHING_##type.Doitnow()
最終將會擴展到
WhatThe("TEST1", 1).DoitNow()
究竟是什麼,你正在努力實現(部分來自使得代碼一個痛苦的調試)嗎? – 2013-04-04 06:43:32
我只是想了解更多關於宏擴展的內容,結構來自g2log [link](https://sites.google.com/site/kjellhedstrom2/g2log-efficient-background-io-processign-with- c11)在g2log.h中。我相信他有這樣做的很好的理由。 – James 2013-04-04 06:59:28
請注意,許多(如果不是全部的話)編譯器提供了一個選項,將預處理器的結果寫入文件。例如在Visual Studio中,您可以在項目屬性/配置屬性/ C/C++ /預處理器/預處理到文件中找到它。對於gcc和g ++,這是-E選項。 – TobiMcNamobi 2013-04-04 07:11:45