如何使用自定义流操纵器在类实例中保存数据
How to use custom stream manipulators to save data in class instance?
我想像这样使用我自己的操纵器:
person << name << "Peter" << age << 45 << country << "Canada";
在功能中:
ostream& person<<(std::ostream &os)
我想把45岁的Peter和country的数据保存到一个类中。
如何使用这样的自定义操纵器?
我在网上没有找到任何关于这方面的信息。
您需要以下内容:
class person {
public:
enum class field {
name,
country
};
private:
std::string name;
std::string country;
field field_selector;
public:
person& operator<<(field f) {
field_selector = f;
return *this;
}
person& operator<<(std::string s) {
if(field_selector == field::name)
name = s;
else if(field_selector == field::country)
country = s;
return *this;
}
};
像这样使用:
person p;
p << person::field::name << "Peter" << person::field::country << "Canada";
field_selector
保存您通过运算符重载选择的最后一个字段,然后std::string
的重载选择要存储的正确字段。如果您有多个类型的字段,则需要为每个字段定义重载,并决定如果所选字段错误,该怎么办。您还应该为field_selector
定义一个默认值(我没有定义(。
所有这些都是不必要的复杂。如果字段是public
,则可以简单地使用聚合初始化或直接设置成员。如果它们是private
,您可以编写setter/modifier函数来为每个字段赋值。
相关文章:
- 从C++实例化QML
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 如何使用自定义流操纵器在类实例中保存数据
- 让类方法为每个实例保存不同的静态变量
- 将子类实例保存在父类型变量中并通过父变量使用 Child 函数?
- 多个实例保存对unique_ptr的引用
- C++:保存特定实例中的方法的函数指针
- C++函数通过strlen()运行'string'类型参数,将新值保存到虚拟类实例,将虚拟类传递给新函数。为什么?
- 从B对象中访问类a实例的数据成员(保存类B对象的列表)
- 在循环中创建实例并将它们保存到另一个向量中最有效的方法是什么?
- 保存稍后将实例化的'class'