在使用数据流创建对象后更新对象的推荐方法是什么?我想避免使用许多 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;
此方法编译并运行。
只是想知道这是否是一个好方法,它是否有任何缺陷\限制?请注意,大多数使用 operator<< 的在线示例与我在上面所做的不同。
最佳答案
我建议遵循与标准库中相同的表示法:使用 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
派生的,这个运算符将适用于它以及所有其他输入流类型。
关于c++ - 运算符按位左移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30475977/