如何编写将文本附加到部分函数名称以创建完整函数名称的宏
how to write a macro that will append text to a partial function name to create complete function name
我正在尝试弄清楚如何编写一个可以接受部分函数名称的C预处理器宏和一组文本,以附加到功能名称,以及一组参数创建实际函数名称和函数调用。这个想法是组合前两个宏参数以创建一个函数名称,然后将其余的宏参数添加为创建函数名称的参数。
所以我想实现以下内容:
MACRO(foo, postfix, ...)
----> foo_postfix(__VA_ARGS__)
例如,如果我有几个C函数func_test1()
和func_test2()
和func_test3()
,那么我希望能够使用宏将func
指定为第一个参数,而test1
作为第二个参数,以便宏创建宏的函数名称func_test1()
,或将func
指定为第一个参数,而test2
作为第二个参数,以便宏将创建func_test2
的函数名称。
或类似
的东西#define MACRO(foo,postfix,...) "macro to combine foo and postfix into actual function name"
然后我可以使用这个宏,例如
MACRO(func, test1, a, b, c); // will create func_test1(a, b, c);
MACRO(func, test2, i, x); // will create func_test2(i, x);
似乎没有一种直接的方法。
您可以在宏中使用 ##
将两个参数作为字符串连接。因此,如果您的宏为
MACRO(foo, postfix, ...)
您可以像这样定义
MACRO(foo, postfix, ...) foo##_##postfix(__VA_ARGS__)
^^^ adds an underscore in the middle. Don't include if you
don't want the underscore.
与下划线的foo
和postfix
融合。
使用这些类型的宏的参数时要小心。该参数粘贴而没有进行宏扩展,因此进行MACRO(foo, MYMACRO, ~)
将扩展到foo_MYMACRO()
,而不是MYMACRO
的值。
C预处理器允许您使用##
将"胶"令牌一起使用。
这意味着
#define MACRO(x, y) x ## _ ## y
MACRO(foo, postfix)
将变成
foo_postfix
相关文章:
- 通过构造函数创建的所有对象都具有相同的向量
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- C++ :: 如何捕获由 void 函数创建的矩阵
- 通过零参数构造函数创建的 glm::mat4 应该包含哪些值?
- 用于基于成员字段或函数创建比较器的快捷方式
- std::使用类成员函数创建线程 - 最佳实践
- 为C++重载函数创建SWIG类型映射
- 使用成员函数创建std::函数不会编译
- 如何为返回特定类型的函数创建 SWIG 类型图
- 为具有多个参数的函数创建 SWIG 类型图的更简单方法?
- 通过另一个宏创建的函数创建所有列表的宏
- std::map<int, A> 运算符 [] 需要使用空构造函数创建 A
- 无法使用 CreateWindowEx 函数创建窗口
- c++ 从成员函数创建新线程并移动对象和整个对象
- 无法使用 c++ 中的类成员函数创建/写入文件
- 使用makeword函数创建错误e0109-表观呼叫的括号前表达式必须具有(指针到 - )函数类型
- 为 OpenMP 函数创建别名 ||部分禁用 openMP
- 稍后使用<Class>调用类构造函数创建 std::vector