【发布时间】:2013-01-30 17:37:37
【问题描述】:
在类实例化时,我想从文件中读取数据并将其处理成多个类对象。到目前为止我所做的(并且效果很好)是
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_);
}
我不喜欢这种方法的地方是
- 数据被初始化两次:一次(void)在初始化列表中,一次在构造函数中填充实际内容;还有那个
- 我无法将任何(已处理)数据对象标记为
const。
有没有办法组织对象的创建,使其全部发生在初始化列表中?
【问题讨论】:
-
在代码中处理的数据被初始化了两次。
-
const 向编译器保证任何标记为 const 的值都不会改变(即,该值是在编译时设置的)。当您在运行时根据文件内容设置已处理的数据成员时,它们怎么可能是 const?
-
@ellimilial 与
data*_相同,确实:第一次在初始化列表中使用 void,然后实际填充构造函数的主体。我想避免这种情况,但不知道怎么做。 -
@Aeluned 编译时不需要知道数据对象的内容,
const只是强制对象构造后内容不改变。 -
如何将
data1_和data2_重构为包含的class对象?
标签: c++ initialization initializer-list