Moving 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类可以只专注于扫描输入,而不是实际包含它

现在,它可以只专注于一项任务。

然后,您需要找出保持流对象有效的最佳方法。我建议为那项任务单独上课。

我本想写这篇评论的,但这里太多了。

相关内容

  • 没有找到相关文章

最新更新