私は現在、(私は私の実際のコードを投稿することはできません)私は、次の同等を達成する必要があるクラスを持っている:関数呼び出し結果を使用して、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でそれを行うにはどのような方法を把握することはできません。
私はこの回答の変形を使用してしまいました。私はSplitResultのインスタンスを格納する必要がないため、初期化後は決して触れませんでした。ありがとう! – rkjnsn