[英]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]),
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.