使用数据流创建后更新对象的推荐方法是什么?我想避免使用多种SetXX方法。
说我有一个看起来像这样的课程;
class Model
{
public:
Model(int, double, std::string);
private:
int a;
double b;
std::string c;
};
解决此问题的一种方法是添加运算符;
friend Model& operator<<(Model&, std::stringstream&)
使用上述代码;
// create model
Model model(...);
// do stuff
// update model later
model << stream;
这种方法编译并运行。
只是想知道这是否是一个好方法,是否有任何缺陷\限制?请注意,大多数示例在线使用运算符&lt;&lt;使用它与我上面做的不同。
答案 0 :(得分:2)
我建议使用与标准库中相同的表示法:使用operator>>
作为输入并返回对流的引用,而不是Model
。这样,对于其他人(熟悉标准库但不熟悉您的符号),它将更具可读性,并且它将允许链式输入:
friend std::istream & operator>>(std::istream & s, Model & m)
{
m.data = ...
return s;
}
Model m1, m2;
std::cin >> m1 >> m2;
由于std::istringstream
派生自std::istream
,此运算符将适用于它以及所有其他输入流类型。
答案 1 :(得分:0)
我考虑编写一个<<
方法来获取流而不是使用运算符。正如您所说,使用操作员stream >> model
的缺陷是,它通常不会用于此目的,这可能会激怒所有查看您的代码的人,而这些代码并不知道您是如何实现的运营商。如评论中所述,matches()
更常用。