我有一個宏,其中一個參數是一個枚舉值,它在未指定名稱空間範圍的情況下給出。然而,在我需要訪問宏的某處(顯然我必須在那裏定義名稱空間),但我似乎無法用模板參數來連接命名空間名稱。鑑於以下示例代碼,編譯器會抱怨pasting :: and Val doesnt give a valid preprocessor token
(它可以很好地將get和a進行拼接)。具有名稱空間的Concat宏參數
namespace TN
{
enum Info
{
Val = 0
};
}
#define TEST(a) TN::Info get ## a(){return TN::##a;}
TEST(Val)
所以有任何方法來完成這項工作,而無需使用另一參數,並基本上指定要被使用兩次(例如#define TEST(a,b) TN::Info get ## a(){return b;}
)的值?
顯然我在想辦法複雜,謝謝 – Grizzly 2009-12-18 14:29:13
@Grizzly:諷刺的是,恰恰相反!我的第一本能也是連接,因爲宏基本上是查找和替換文本替換。當你意識到他們比這更復雜時(因爲他們在_tokens_上工作,而我們的大腦卻不這樣)出現這樣的問題。 :) – 2014-03-19 14:10:16