我正在尝试使用类成员初始化程序的C ++ 11特性来初始化类的变量。我所拥有的类的变量是std :: string和std :: ifstream。
class A{
std::string filename = "f1.txt";
std::ifstream filestream = ....
public:
....
};
有没有办法初始化文件流,并使用类成员初始化同时检查错误。
我想做的是,类似于下面的内容:
class A{
std::string filename = "f1.txt";
std::ifstream filestream(filename);
if(filestream.is_open()) .... // check if file cannot be opened
public:
....
};
答案 0 :(得分:2)
您可以编写并调用执行相应检查的内联lambda表达式;这样的lambda表达式可以访问数据成员:
class A {
std::string filename = "f1.txt";
std::ifstream filestream = [&] {
std::ifstream fs{filename};
if (!fs)
throw std::runtime_error("failed to open ifstream");
return fs;
}();
};
将filename
作为参数,例如将逻辑分离为可重用的辅助函数可能更清楚。静态成员函数:
class A {
std::string filename = "f1.txt";
std::ifstream filestream = openChecked(filename);
static std::ifstream openChecked(std::string const& filename)
{
std::ifstream fs{filename};
if (!fs)
throw std::runtime_error("failed to open ifstream");
return fs;
}
};