C++ 将宏扩展用作标识符的一部分
考虑以下代码:C++ 将宏扩展用作标识符的一部分,c++,C++,考虑以下代码: struct S {}; #define CREATE_INSTANCE S instance_##__LINE__ int main() { CREATE_INSTANCE; CREATE_INSTANCE; return 0; } 我想要它做的是创建两个名为instance_7和instance_8的S实例。它实际做的是创建实例\uuuuuuuuuuuuuuuuuuuuuuuuuuuu两次 如何实现我想要的?使用一些间接方法: #define C
struct S {};
#define CREATE_INSTANCE S instance_##__LINE__
int main()
{
CREATE_INSTANCE;
CREATE_INSTANCE;
return 0;
}
我想要它做的是创建两个名为instance_7
和instance_8
的S
实例。它实际做的是创建实例\uuuuuuuuuuuuuuuuuuuuuuuuuuuu
两次
如何实现我想要的?使用一些间接方法:
#define Concat_(a, b) a ## b
#define Concat(a, b) Concat_(a, b)
#define CREATE_INSTANCE S Concat(instance_, __LINE__)
有趣!你是说宏是在其他宏的参数的上下文中扩展的,而不是在我在这里使用它的上下文中?@VioletGiraffe记住cpp实际上是一个过程。我仍然不明白为什么需要双间接寻址…@user0042:但是宏不应该在其他宏的扩展中扩展吗?@Violet不,没有宏,这些问题实际上是无法解决的。