从映射中替换赋值的宏
Macro replacement for assignment from map
这个(或类似的)有时看起来很方便:
#define ITEM_GET(variable,map) variable=map[#variable]
//...
double foo;
std::map<std::string,double> variables;
ITEM_GET(foo,variables);
我能做到这一点没有宏使用某种模板吗?这种速记法不好吗?
我不一定说这是不好的做法,但是您必须确保利大于弊。我建议将这个宏的作用域保持在最低限度。例如,如果您只在加载期间执行这些操作,则将宏的存在限制在与加载相关的函数中。
如果您的任务是这样的操作是非常常见的,提供宏似乎是一个明智的选择。如果只是为了偶尔的方便,我觉得宏的一般错误行为(主要是没有作用域)是不值得的。
关于你的第一个问题,没有宏就没有办法做到这一点。在预处理器之后的任何转换阶段都不能访问相当于字符串运算符#
的工具。
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 非常量变量只读位置的赋值
- 使用赋值运算符重载从类中返回jobject
- C++数据文件、数组和计算赋值
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 全局作用域中函数指针的赋值
- 错误:在为指针赋值时,void值没有被忽略
- 标准库类型的赋值运算符的引用限定符
- 关于 c++ 函数中指针赋值的简单问题
- C++赋值运算符,我们可以用 copy 替换它吗?
- 从自身内部替换 std::函数(通过将移动赋值到 *this?)
- 模板赋值运算符不替换默认赋值运算符
- 从映射中替换赋值的宏
- 不使用赋值操作符的值替换