【发布时间】:2018-07-06 16:32:04
【问题描述】:
我需要编写一个如下所示的宏
MACRO(one, name, "some string");
如果宏有 n 个参数,我需要能够将第一个 n-1 参数与下划线连接在一起。例如,上面的调用将扩展为
std::string one_name{"some string"};
同样,如果我有这样的事情
MACRO(one, two, name, "some string");
我应该得到
std::string one_two_name{"some string"};
这可能吗?
免责声明:我不能不为此使用宏。
【问题讨论】:
-
也许你应该考虑制作一个工具,从一些简单的输入文件中自动生成你想要的代码?或者可能重新考虑您的需求、分析和设计,这似乎迫使您做类似的事情?
-
您可以查看Boost.Preprocessor。
-
如果您解释了您实际上试图解决的问题,也许会有所帮助
-
@alterigel 我正在尝试将变量名称附加到彼此,并检查名称是否与声明变量的命名空间顺序相对应。例如,如果宏在 @987654327 @ 我想声明一个名为
a_b_name的变量作为宏扩展的一部分,并检查::a::b::a_b_name是否有效(以及static_assert是否有效) -
不这么认为,不。
n的最大值是多少?
标签: c++ macros declaration