我有一个属性为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_
成员。