3

我想要一个 C++ 类,它从包含一堆数据的文件中初始化,读取数据并将其存储为const数据成员。

我目前做的是

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

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

这里有什么好的模式?

4

2 回答 2

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);

如果您愿意,还可以使 reader 函数成为static类成员函数和构造函数。private

于 2012-10-01T00:10:11.857 回答
1

而不是一组 datumX 成员 - 将 struct 与这些具有文件构造函数的成员一起使用。并使这个 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) {}
};
于 2012-10-01T00:09:42.553 回答