如何使用自定义流操纵器在类实例中保存数据

How to use custom stream manipulators to save data in class instance?

本文关键字:实例 保存 数据 何使用 自定义 操纵      更新时间:2023-10-16

我想像这样使用我自己的操纵器:

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函数来为每个字段赋值。