首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C/C++宏中的逗号

C/C++宏中的逗号
EN

Stack Overflow用户
提问于 2012-12-12 23:00:23
回答 7查看 45.4K关注 0票数 118

假设我们有一个这样的宏

代码语言:javascript
运行
复制
#define FOO(type,name) type name

我们可以像这样使用

代码语言:javascript
运行
复制
FOO(int, int_var);

但并不总是如此简单:

代码语言:javascript
运行
复制
FOO(std::map<int, int>, map_var); // error: macro "FOO" passed 3 arguments, but takes just 2

当然我们可以这样做:

代码语言:javascript
运行
复制
 typedef std::map<int, int> map_int_int_t;
 FOO(map_int_int_t, map_var); // OK

这不是很符合人体工程学。另外,必须处理类型不兼容的问题。你知道怎么用宏解决这个问题吗?

EN

Stack Overflow用户

发布于 2013-11-08 00:36:17

如果您不能使用括号,并且您不喜欢Mike的SINGLE_ARG解决方案,那么只需定义一个逗号:

代码语言:javascript
运行
复制
#define COMMA ,

FOO(std::map<int COMMA int>, map_var);

如果您想将一些宏参数串行化,这也很有帮助,如

代码语言:javascript
运行
复制
#include <cstdio>
#include <map>
#include <typeinfo>

#define STRV(...) #__VA_ARGS__
#define COMMA ,
#define FOO(type, bar) bar(STRV(type) \
    " has typeid name \"%s\"", typeid(type).name())

int main()
{
    FOO(std::map<int COMMA int>, std::printf);
}

它打印std::map<int , int> has typeid name "St3mapIiiSt4lessIiESaISt4pairIKiiEEE"

票数 139
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13842468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档