在没有括号的宏中使用逗号:如何与模板混合和匹配? [英] Using commas inside a macro without parenthesis: How can I mix and match with a template?

查看:19
本文介绍了在没有括号的宏中使用逗号:如何与模板混合和匹配?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑一个简单的宏:

#define ECHO(x) x

ECHO(foo(1, 2))

这会产生我们期望的准确输出:

This produces the exact output we expect:

foo(1, 2)

上面的例子有效,因为与函数调用相邻的括号被预处理器识别.

The above example works because the parenthesis adjacent to the function call are recognized by the preprocessor.

现在考虑如果我使用模板而不是函数调用会发生什么:

Now consider what happens if I use a template instead of a function call:

ECHO(template<int, bool>)

这会导致错误,因为预处理器将 template<intbool> 解释为宏的两个单独参数.预处理器无法识别 <> 的作用域!

This causes an error because the preprocessor interprets the template<int and the bool> as two separate arguments to the macro. The preprocessor doesn't recognize <> for scope!

有没有在宏中使用这样的模板?

Is there anyway to use a template like this in a macro?

推荐答案

#define COMMA ,
ECHO(template<int COMMA bool>)

有点痛,但很管用.

FWIW,如果参数的语法允许 ()s,则不需要替换,例如,

FWIW, if the syntax for the argument allows ()s, you don't need the substitution, e.g.,

ECHO((a, b))

适用于单个参数宏,但不适用于所有情况(包括您的情况).

will work for a single argument macro but that doesn't work in all cases (including yours).

这篇关于在没有括号的宏中使用逗号:如何与模板混合和匹配?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆