正在使用std::string初始化istream属性



我有一个属性为std::istream & _submission;的类和一个构造函数,该构造函数接受istream并初始化该属性。现在,我希望我的课接受字符串(而不是istream)。我怎么能这么做?它抱怨属性_submission未初始化(must explicitly initialize the reference member 'submission_'

现状:Parser::Parser(std::istream & input_stream) : submission_(input_stream)我想要Parser::Parser(std::string input)

这是不可能的。由于您的数据成员只是一个(非const引用,因此您无法将临时std::istringstream绑定到它

您可以做的是为您的类型赋予两个属性,一个std::istream&和一个std::istringstream。如果你得到一个流,你不使用std::istringstream,但如果你得到std::string,你用它初始化std::istringstream,并将引用绑定到它。

class MyType
{
public:
  MyType(std::istream& is) : stream_ {is}
  {
  }
  MyType(std::string s) : stringstream_ {std::move(s)}
  {
  }
  // Now you can use stream_ in your other member functions.
private:
  std::istringstream stringstream_ {};
  std::istream& stream_ {stringstream_};
};

请注意,声明顺序很重要:必须在声明stream_成员之前声明stringstream_成员

最新更新