有没有办法编写带有参数的C ++宏,这些参数不是用逗号分隔,而是用任何其他字符甚至空格分隔?
示例:我正在考虑使用typed和named参数替换这样的调用的轻量级方法:
foo("value", (int)0);
类似
foo(ARG(string key = "some_key"),
ARG(int value = 0));
可以预处理到
foo(static_cast<string>("some_key"), static_cast<int>(0));
当然,使用逗号可以实现这一点,但我只是好奇......
答案 0 :(得分:4)
有没有办法编写带有参数的C ++宏,这些参数不是用逗号分隔,而是用任何其他字符甚至空格分隔?
不,预处理器规范没有提供任何更改分隔符的方法。
我正在考虑一种轻量级的方法来使用typed和named参数替换这样的调用:
foo(ARG(string key = "some_key"), ARG(int value = 0));
可以使用模板重载operator=
来实现。 Louis Dionne在今年的Meeting C ++主题演讲中展示了一个可能的示例实现:you can find it here。
最终语法如下:
int main() {
create_window("x"_arg = 20, "y"_arg = 50,
"width"_arg = 100, "height"_arg = 5);
}
具有不同语法的其他实现是可能的 - 关键是您不需要预处理器。
生产就绪示例是Boost Parameter Library。
答案 1 :(得分:0)