繁体   English   中英

使用函数调用结果在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]), 
        ...

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM