作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在使用数据流创建对象后更新对象的推荐方法是什么?我想避免使用许多 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/
我正在做一个项目,我的 android 在这个项目中作为一个网络服务器工作;输入带端口号的 IP 地址,打开 Web 界面,用户可以将文件上传到手机。我想在 Web 界面上显示一些图片,以便我们的界面
我是一名优秀的程序员,十分优秀!