Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
这(或类似的)有时似乎很方便:
#define ITEM_GET(variable,map) variable=map[#variable] //... double foo; std::map<std::string,double> variables; ITEM_GET(foo,variables);
我可以使用某种模板在没有宏的情况下执行此操作吗?这是速记的坏习惯吗?
我不一定会说这是不好的做法,但你必须确保利大于弊。我建议将这个宏的范围保持在最低限度。例如,如果您只在加载期间执行这些操作,请将宏的存在限制在与加载相关的函数内部。
如果您的任务是这种操作非常常见,那么提供宏似乎是一个明智的选择。如果只是为了偶尔的方便,我觉得宏的一般不当行为(主要是没有范围)是不值得的。
至于您的第一个问题,没有宏就无法做到这一点。在预处理器之后的任何翻译阶段都无法访问与 stringise 运算符等效的工具#。
#