具有"placeholder"值的宏
Macro with "placeholder" value
本文关键字:placeholder 具有 更新时间:2023-10-16
我正在使用一个包含一组预处理器库的库。 其中之一是FOR_EACH样式宏,它遍历__VA_ARGS__
并为每个参数调用用户提供的宏。 用户提供的宏称为:SOME_MACRO(current_arg)
但是,问题在于它仅适用于接受单个参数的用户提供的宏。 我正在尝试做一些特别的事情,它涉及struct
的名称和结构中的每个字段。 问题是,这需要宏的两个参数。
由于我正在使用的库只接受一元宏,有没有办法将额外的参数"绑定"到我的宏?
截至目前,我必须在宏中对结构的名称进行硬编码。 所以,如果我正在合作的struct
被命名为 Foo
,我不得不说:
#define MY_MACRO(FIELD) /* do something with &Foo::FIELD */
有没有办法我可以将第二个STRUCT
参数"绑定"到宏,也许还有一些进一步的间接,以便当库调用我的宏时,它能够扩展为:
#define MY_MACRO(FIELD) /* do something with &STRUCT::FIELD */
是的。您可以使用以下技术。
#define MY_MACRO(FIELD) EXPAND FIELD
#define EXPAND(X, FIELD) X::FIELD()
以下测试代码中的用法:
struct foo { static int f() { return 0; } };
struct STRUCT { static int f() { return 1; } };
#define MY_MACRO(FIELD) EXPAND FIELD
#define EXPAND(X, FIELD) X::FIELD()
int main ()
{
int i = MY_MACRO((STRUCT,f)); // see here braces inside braces
}
上面的代码扩展到,
int main ()
{
int i = STRUCT::f();
}
相关文章:
- 具有瞬态资源的RAII类
- 具有默认模板参数的多态类的模板推导失败
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::具有相同基类的类的变体
- 命名空间中具有.h和.cpp文件的类
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 具有N列和N行的矩阵,列必须具有N-1、N-2等值
- 具有重复类型的C++可变模板
- 具有最大子序列大小的序列,每个元素都相同
- 同时具有"聚合初始化"和"模板推导"
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 初始化具有非默认构造函数的std::数组项的更好方法
- 如何从具有移动语义的类对象中生成共享指针
- 具有"placeholder"值的宏