c++ - 运算符按位左移

标签 c++ c++11

在使用数据流创建对象后更新对象的推荐方法是什么?我想避免使用许多 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/

相关文章:

c++ - 更新 Vector 中对象的属性

c++ - Visual C++ 2010 - CL.exe 退出代码 5

C++ 设计容器和管理列表返回

c++ - 如何处理递归?

c++ - 如何在 Xcode 5 中使用编辑方案将参数传递给 main.cpp

c++ - Visual Studio 2015 C++项目错误C++ 11标准

c++ - c++注释中的//@include是什么

c++ - 将模板化类型作为字符串获取

c++ - 字幕字符串(向左滚动文本)

c++ - 提取函数的返回类型而不调用它(使用模板?)