使用函数调用结果在C++03中初始化多个成员
Use function call result to initialize multiple members in C++03?
我目前有一个类,需要完成以下等效任务(我无法发布实际代码):
class Data
{
public:
Data(const std::string &data_string)
: member_1(splitData(data_string)[0]),
member_2(splitData(data_string)[1]),
member_3(splitData(data_string)[2]),
member_4(splitData(data_string)[3]),
member_5(splitData(data_string)[4])
{}
};
问题是splitData
很昂贵,我只想运行一次。通常,我会将结果存储在构造函数主体中的局部变量中,但在这种情况下,许多成员不是默认可构造的,因此我必须在初始值设定项列表中初始化它们。
我知道在C++11中,我可以使用委托构造函数来解决我的问题:
class Data
{
public:
Data(const std::string &data_string)
: Data(splitData(data_string)) // splitData only called once
{}
private:
Data(const SplitResult &split_result)
: member_1(split_result[0]),
member_2(split_result[1]),
member_3(split_result[2]),
member_4(split_result[3]),
member_5(split_result[4])
{}
};
但我想不出用C++03做这件事的任何方法。
让split_result
成为一个只用于初始化的成员怎么样:
class Data
{
SplitResult split_result;
//declare member_x here
public:
Data(const std::string &data_string)
: split_result(splitData(data_string)),
member_1(split_result[0]),
member_2(split_result[1]),
member_3(split_result[2]),
member_4(split_result[3]),
member_5(split_result[4])
{}
};
只需确保在其他成员之前声明它,这样它就会首先初始化。成员初始化顺序由它们在类中定义的顺序决定。
Data (const std::string data_string,
SplitResult split_result = split_data(data_string)) :
member_1(split_result[0]),
...
这没有检查,我在用手机。。。
**UPD**不,它不起作用。新尝试:
Data (const std::string data_string,
SplitResult split_result = SplitResult()) :
member_1((split_result = split_data(data_string))[0]),
member_2(split_result[1]),
...
相关文章:
- 为什么在C++中首先初始化成员类
- 是否可以防止省略聚合初始化成员?
- 正在复制具有未初始化成员的结构
- 使用大括号或括号初始化成员变量
- C++结构:强制初始化成员?
- C++中未初始化成员布尔变量的默认值是多少?
- 使用默认值初始化成员引用
- 在构造函数中初始化成员时,是否应该在成员上使用 std::move?
- C++使用 { } 初始化成员变量
- 如何根据构造函数参数使用超类类型初始化成员变量?
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 有没有办法在Brace中初始化成员
- 从现有 istream 或类本身创建的 istream 初始化成员 istream
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- 通常应用方法,使用带有构造函数委托的 SFINAE 通过类模板的构造函数初始化成员
- 如何在嵌套类中初始化成员?C
- 是否可以在构造函数主体中初始化成员变量,而不是初始值设定项列表
- 编译器错误,因为构造函数必须显式初始化成员
- 如何使用成员函数初始化成员函数指针
- C 如何使用隐藏的默认构造函数初始化成员