首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移动std::istream

移动std::istream
EN

Stack Overflow用户
提问于 2020-04-01 17:29:05
回答 1查看 513关注 0票数 0

我有一个Scanner类来标记化来自文件、cin等的字符流。

代码语言:javascript
复制
class Scanner {
public:
  Scanner(std::istream&& c) : input{std::move(c)} {}

private:
  std::istream input;
};

此代码无法编译,因为std::istream的move构造函数受到保护。我可以使用对流的引用来代替,但是我不能保证没有人在Scanner类(下面的ss)之外使用我的流。

代码语言:javascript
复制
  std::string code = "this is code";
  std::stringstream ss{code};
  Scanner scanner{ss};

有没有一个很好的方法来解决这个问题,或者人们只是使用std::istream&并抱着最好的希望?

EN

回答 1

Stack Overflow用户

发布于 2020-04-01 17:55:09

根据我对流对象工作的记忆。

你需要以不同的方式来思考这个问题。

代码语言:javascript
复制
class Scanner {
public:
  Scanner() {}
  virtual void scan(std::istream & p_stream);
};

您的Scanner类可以只专注于扫描输入,而不是实际包含它。

现在,它可以完全专注于单个任务。

然后,您需要找出使流对象保持活动状态的最佳方法。我建议使用一个单独的类来完成这项任务。

我本想写这篇文章作为评论,但这里有太多了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60967680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档