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

时间:2015-03-26 20:47:31

标签: c++

我有一个具有属性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)

1 个答案:

答案 0 :(得分:4)

这是不可能的。由于您的数据成员只是(非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_};
};

请注意,声明或事项:您必须在<{em> stringstream_成员之前声明stream_成员