3

大量のデータを含むファイルから初期化され、データを読み取り、constデータメンバーとして格納するC++クラスが必要です。

私が現在していることは

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

必要に応じて、リーダー関数をstaticクラスメンバー関数およびコンストラクターにprivateすることもできます。

于 2012-10-01T00:10:11.857 に答える
1

datumXメンバーのセットの代わりに、ファイルからコンストラクターを持つこれらのメンバーでstructを使用します。そして、このstructconstdataをクラスのメンバーにします。

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 に答える