我有一个具有属性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)
答案 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_
成员。