В настоящее время у меня есть класс, в котором мне нужно выполнить эквивалент следующего (я не могу опубликовать свой фактический код):
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.