クラスのインスタンス化時に、ファイルからデータを読み取り、それをいくつかのクラスオブジェクトに処理したいと思います。私がこれまでにしたこと(そしてうまくいくこと)は
myData::myData(const std::string & file):
data1_(this->read(file)),
processedData1_(this->createProcessedData1_(data1_)),
processedData2_(this->createProcessedData2_(data1_)),
processedData3_(this->createProcessedData3_(data1_))
{
}
別のクラスでは、read()
メソッドは複数の生データオブジェクトを作成します。この場合、イニシャライザリストにパックする方法がわからないので、次のように実行しています。
myData::myData(const std::string & file):
data1_(),
data2_(),
processedData1_(),
processedData2_(),
processedData3_()
{
this->read(file); // fills data1_, data2_
processedData1_ = this->createProcessedData1_(data1_, data2_);
processedData2_ = this->createProcessedData2_(data1_, data2_);
processedData3_ = this->createProcessedData3_(data1_, data2_);
}
このアプローチについて私が気に入らないのは、
- データは2回初期化されます。1回は初期化子リストで(void)、もう1回はコンストラクターで実際のコンテンツで埋められます。そしてそれ
- (処理された)データオブジェクトをとしてマークすることはできません
const
。
すべてが初期化リストで行われるようにオブジェクトの作成を整理する方法はありますか?