Gri*_*zly 5 c++ c-preprocessor
我有一个宏,其中一个参数是一个枚举值,在没有指定命名空间范围的情况下给出.但是在宏内部我需要访问它(显然我必须在那里定义命名空间),但我似乎无法使用模板参数连接命名空间名称.给定以下示例代码,编译器会抱怨pasting :: and Val doesnt give a valid preprocessor token(它可以很好地将get和a连接到getVal).
namespace TN
{
enum Info
{
Val = 0
};
}
#define TEST(a) TN::Info get ## a(){return TN::##a;}
TEST(Val)
Run Code Online (Sandbox Code Playgroud)
那么有没有办法让这项工作不使用另一个参数,并基本上指定要使用两次的值(例如#define TEST(a,b) TN::Info get ## a(){return b;})?
CB *_*ley 10
##是一个令牌粘贴操作符,即它应该从多个令牌中创建一个令牌,并且正如编译器所说,::Val它不是一个令牌,它是两个令牌.
为什么你需要认为你需要第二个##?这有什么不对.
#define TEST(a) TN::Info get ## a () { return TN::a; }
Run Code Online (Sandbox Code Playgroud)