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

标签 c++

<分区>

考虑以下代码:

struct S {};

#define CREATE_INSTANCE S instance_##__LINE__

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

我想要它做的是创建两个名为 instance_7instance_8S 实例。它实际上做的是创建 instance___LINE__ 两次。

如何实现我想要的?

最佳答案

使用一些间接的:

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

关于c++ - 使用宏扩展作为标识符的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45989446/

相关文章:

c++ - OpenGL 实例化 VBO - 每个顶点、每个实例的属性

c++:将来安排函数调用?

c++ - 将一个 vector 插入另一个 vector

c++ - 将 const 模式写入特定大小的文件

c++ - 获取流程描述

可变长度的 C++ 数组不起作用

c++ - 预处理器或链接中是否包含库

c++ - 哪些 C++ 随机数引擎具有 O(1) 丢弃函数?

c++ - 我想从一个有空格的文件中读取 C++ ifstream

c++ - QMenu 中的 TriState QAction