从映射中替换赋值的宏

Macro replacement for assignment from map

本文关键字:赋值 替换 映射      更新时间:2023-10-16

这个(或类似的)有时看起来很方便:

#define ITEM_GET(variable,map) variable=map[#variable]
//...
double foo;
std::map<std::string,double> variables;
ITEM_GET(foo,variables);

我能做到这一点没有宏使用某种模板吗?这种速记法不好吗?

我不一定说这是不好的做法,但是您必须确保利大于弊。我建议将这个宏的作用域保持在最低限度。例如,如果您只在加载期间执行这些操作,则将宏的存在限制在与加载相关的函数中。

如果您的任务是这样的操作是非常常见的,提供宏似乎是一个明智的选择。如果只是为了偶尔的方便,我觉得宏的一般错误行为(主要是没有作用域)是不值得的。

关于你的第一个问题,没有宏就没有办法做到这一点。在预处理器之后的任何转换阶段都不能访问相当于字符串运算符#的工具。