const初始化几个数据成员

时间:2012-09-30 23:57:25

标签: c++ initialization const

我希望有一个C ++类,它从包含大量数据的文件初始化,读取数据并将其存储为const数据成员。

我目前正在做的是

MyClass(const std::string & fileName):
datum0(),
datum1(),
datum2()
{
  this->read(fileName);
  // read() sets all datumX data members.
}

这样做的缺点是datumX不能再标记为const,因为它们是在实际初始化步骤之后设置的。

这里有什么好的模式?

2 个答案:

答案 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) {}
};