P45*_*ent 6 c++ c-preprocessor
我有一些代码基本上可以浓缩为
#define FOO(a)
FOO(std::map<int, int>);
Run Code Online (Sandbox Code Playgroud)
但它会发出编译错误(宏的实际参数太多FOO)。
显然,预处理器认为我已经提供了std::map<int和int>作为参数。
有没有办法解决这个问题?预处理器不会以这种方式处理带逗号的带引号的字符串。
理想情况下,这应该是注释,但是 SO 不支持注释中的代码,所以,您可以这样做
#include <map>
#define T_ARGS( ... ) < __VA_ARGS__ >
#define FOO( a ) a x;
auto main() -> int
{
FOO( std::map T_ARGS( int, int ) );
(void) x;
}
Run Code Online (Sandbox Code Playgroud)
或者您可以定义一个解析为逗号的宏,或者您可以使用特定于某些特定用例的任何方案(例如,单独传递模板名称)。
| 归档时间: |
|
| 查看次数: |
1084 次 |
| 最近记录: |