预处理器:插入结构名称中的前一个行号
Preprocessor: concat previous line number in the name of a structure
我知道如何声明一个结构,其中名称包含当前行号。以下代码按预期工作。
#define CREATE_NAME_CONCAT_(X, Y) X ## Y
#define CREATE_NAME_CONCAT(X, Y) CREATE_NAME_CONCAT_(X, Y)
#define CREATE_FOO_NAME CREATE_NAME_CONCAT(Foo_, __LINE__)
struct CREATE_FOO_NAME { int x; };
typedef Foo_4 Foo;
int main()
{
Foo foo;
foo.x = 42;
return 0;
}
如何使用前一个行号编写typedef行以下代码不起作用:
#define CREATE_NAME_CONCAT_(X, Y) X ## Y
#define CREATE_NAME_CONCAT(X, Y) CREATE_NAME_CONCAT_(X, Y)
#define CREATE_FOO_NAME CREATE_NAME_CONCAT(Foo_, __LINE__)
struct CREATE_FOO_NAME { int x; };
typedef CREATE_NAME_CONCAT(Foo_, __LINE__-1) Foo;
int main()
{
Foo foo;
foo.x = 42;
return 0;
}
注意1:是的,我有充分的理由这么做
注意2:我不使用C++11或更新的
注3:我不想辩论注1&2
预处理器非常有限,最好的解决方案是根本不使用它。你可以用模板完成类似的事情:
template <int>
struct FooT;
template <>
struct FooT<__LINE__> { int x; };
typedef FooT<__LINE__-1> Foo;
int main()
{
Foo foo;
foo.x = 42;
return 0;
}
我不知道这是否符合你的要求,因为它们似乎是秘密。
相关文章:
- 预处理器:插入结构名称中的前一个行号
- 将一个向量插入另一个向量的某个位置
- 在一个类中插入另一个类的多重集
- 在C++的链表末尾插入一个节点
- 插入一个基本的单向链表节点似乎破坏了我的 c++ 代码?
- 如何在另一个字符串的x位置插入一个字符串?
- 如何仅使用其中一个维度在 2D 矢量中插入值?
- 如何从一个容器中获取某些元素并将其转换插入到另一个容器中?
- 如果我们不创建一个新节点并使用指针插入数据并建立链接(在链表中)怎么办?
- 在另一个字符串中插入文件扩展名之前的字符串
- 如何组合一个宽字符字符串,中间插入一些空字符
- win32 c++ 我想在静态标签的文本之后直接插入一个 EDIT 控件
- 创建一个函数以在给定位置将元素插入到列表中
- C++ 如何在 std::vector 中插入一个连续的间隔范围?
- C++将 X 向量数据插入到另一个向量
- 插入指针数组会删除上一个结果
- 将向量{x,y,z}插入另一个向量
- 将多个偏移量的多个元素插入到一个矢量中
- 多次生成一个插入的对象
- 用一个插入线程和一个读线程映射并发性