Im Moment habe ich eine Klasse, wo ich das Äquivalent der folgenden erreichen müssen (ich meine eigentliche Code schreiben kann):Verwenden Sie Funktionsaufruf Ergebnis, um mehrere Mitglieder in C++ 03 zu initialisieren?
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])
{}
};
Das Problem ist, dass splitData
teuer ist, und ich möchte, dass es nur laufen Einmal. Normalerweise würde ich das Ergebnis in einer lokalen Variablen im Rumpf des Konstruktors speichern, aber in diesem Fall sind viele der Elemente nicht standardmäßig konstruierbar, also muss ich sie in der Initialisierungsliste initialisieren.
Ich weiß, in C++ 11 konnte ich verwenden Konstrukteure delegieren mein Problem zu lösen:
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])
{}
};
Aber ich kann keinen Weg herauszufinden, es zu tun in C++ 03.
Ich habe eine Variante dieser Antwort verwendet, die mir gefällt, weil sie mich nicht zwingt, eine Instanz von SplitResult zu speichern, die nach der Initialisierung niemals berührt würde. Vielen Dank! – rkjnsn