我有一个Scanner类来标记化来自文件、cin等的字符流。
class Scanner {
public:
Scanner(std::istream&& c) : input{std::move(c)} {}
private:
std::istream input;
};此代码无法编译,因为std::istream的move构造函数受到保护。我可以使用对流的引用来代替,但是我不能保证没有人在Scanner类(下面的ss)之外使用我的流。
std::string code = "this is code";
std::stringstream ss{code};
Scanner scanner{ss};有没有一个很好的方法来解决这个问题,或者人们只是使用std::istream&并抱着最好的希望?
发布于 2020-04-01 17:55:09
根据我对流对象工作的记忆。
你需要以不同的方式来思考这个问题。
class Scanner {
public:
Scanner() {}
virtual void scan(std::istream & p_stream);
};您的Scanner类可以只专注于扫描输入,而不是实际包含它。
现在,它可以完全专注于单个任务。
然后,您需要找出使流对象保持活动状态的最佳方法。我建议使用一个单独的类来完成这项任务。
我本想写这篇文章作为评论,但这里有太多了。
https://stackoverflow.com/questions/60967680
复制相似问题