0

这(或类似的)有时似乎很方便:

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

我可以使用某种模板在没有宏的情况下执行此操作吗?这是速记的坏习惯吗?

4

1 回答 1

0

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

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

至于您的第一个问题,没有宏就无法做到这一点。在预处理器之后的任何翻译阶段都无法访问与 stringise 运算符等效的工具#

于 2013-06-15T09:44:47.267 回答