c++ - 移动 std::istream
问题描述
我有一个Scanner
类来标记来自文件cin
等的字符流。
class Scanner {
public:
Scanner(std::istream&& c) : input{std::move(c)} {}
private:
std::istream input;
};
此代码无法编译,因为 的移动构造函数std::istream
受到保护。我可以使用对流的引用,但是,我不能保证有人没有在Scanner
课堂之外玩我的流(ss
如下)。
std::string code = "this is code";
std::stringstream ss{code};
Scanner scanner{ss};
有没有一种巧妙的方法来解决这个问题,还是人们只是使用std::istream&
并希望得到最好的结果?
解决方案
根据我对流对象工作的记忆。
您需要以不同的方式考虑这一点。
class Scanner {
public:
Scanner() {}
virtual void scan(std::istream & p_stream);
};
您的 Scanner 类可以只专注于扫描输入以查找任何内容,而不是实际包含它。
现在它可以只专注于一项任务。
然后,您需要找出让流对象保持活动状态的最佳方法。我建议为该任务开设一个单独的课程。
我会写这个作为评论,但是这里太多了。
推荐阅读
- android - 我应该如何更改我的应用程序的推送通知图标
- javascript - 登录在登录状态下无法正常工作更新未重新渲染
- django - Django 如何在 transaction.atomic() 中保存日志
- git - 如何设置在 RStudio 中查看以前的提交消息
- laravel - 使用引导插入数据后如何触发事件?(拉拉维尔)
- javascript - 有没有办法使用 Javascript 从文件夹中读取所有 .jpg 文件名?
- ios - SwiftUI : Dismiss modal from child view
- angular - Infinite scroll keeps loading empty data from server even after last row is reached
- r - 使用 For 循环时如何创建向量?
- android - SmartLock 不显示用户个人资料照片