我希望有一个C ++类,它从包含大量数据的文件初始化,读取数据并将其存储为const
数据成员。
我目前正在做的是
MyClass(const std::string & fileName):
datum0(),
datum1(),
datum2()
{
this->read(fileName);
// read() sets all datumX data members.
}
这样做的缺点是datumX
不能再标记为const
,因为它们是在实际初始化步骤之后设置的。
这里有什么好的模式?
答案 0 :(得分:2)
单独解析和构建:
struct MyClass
{
int const a;
int const b;
MyClass(int a_, int b_) : a(a_), b(b_) { }
};
MyClass readMyClass(std::istream & is)
{
int a, b;
// ...
return MyClass(a, b);
}
现在你可以说:
std::ifstream is("data.bin");
MyClass mc = readMyClass(is);
如果您愿意,还可以使阅读器成为static
类成员函数和构造函数private
。
答案 1 :(得分:1)
而不是使用一组datumX成员 - 使用带有这些成员的struct,这些成员具有来自file的构造函数。并使这个struct const数据成员成为你的类:
class MyClass {
...
struct MyData {
MyData(const string& filename) { read(filename); }
void read(const string& filename);
int datum1;
int datum2;
...
};
const MyData myData;
MyClass(const string& filename) : myData(filename) {}
};