使用宏扩展作为标识符的一部分

时间:2017-08-31 20:18:19

标签: c++

请考虑以下代码:

struct S {};

#define CREATE_INSTANCE S instance_##__LINE__

int main()
{
    CREATE_INSTANCE;
    CREATE_INSTANCE;
    return 0;
}

我想要它做的是创建名为Sinstance_7的{​​{1}}的两个实例。它实际上做的是两次创建instance_8

如何实现我的目标?

1 个答案:

答案 0 :(得分:2)

使用一些间接:

#define Concat_(a, b) a ## b
#define Concat(a, b) Concat_(a, b)
#define CREATE_INSTANCE S Concat(instance_, __LINE__)