我可以为逗号使用不同的参数分隔符吗?

时间:2017-01-10 10:21:55

标签: c++ macros

有没有办法编写带有参数的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));

当然,使用逗号可以实现这一点,但我只是好奇......

2 个答案:

答案 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)

您无法使用C / C ++预处理器。

但您可以使用其他预处理器生成C ++代码,例如GNU m4GPP

您还可以编写自己的,即席的C ++代码发射器。