Ich habe eine Klasse wie unten:
%Vor% Ich denke, dass die Aussage return VeryVeryVeryLongTypeName();
sehr langwierig und hässlich ist, meine Frage ist also:
Wie wird ein Objekt, das standardmäßig initialisiert wird, elegant zurückgegeben?
oder mit anderen Worten:
Ist es eine gute Idee, ein Feature in den C ++ - Standard einzufügen, damit die folgende Aussage legal ist?
%Vor% Sie können diese Klasse verwenden, deren Instanz automatisch automatisch in eine Instanz des gewünschten -Typs konvertiert wird. Dies sollte funktionieren, selbst wenn der Standardkonstruktor mit explicit
markiert ist oder wenn Sie immer noch C ++ 03 verwenden.
Und benutze es als:
%Vor%Sie können diese Lösung überall verwenden , sogar in Vorlagen:
%Vor%Ich hoffe, das hilft.
Wie andere bereits erwähnt haben, können Sie sich darauf verlassen, einen Typalias zu definieren. In C ++ 11 können Sie die Notation
verwenden %Vor% und dann SnappyName
an beliebiger Stelle verwenden.
Denken Sie daran, dass Sie in sechs Monaten wieder zu Ihrem Code zurückkehren müssen. Verwenden Sie einen Ansatz, der Ihnen (oder Ihren Mitarbeitern) hilft, eindeutig zu verstehen, was Sie gemeint haben. Denken Sie daran: Der Code wird einmal geschrieben und mehrmals gelesen. Code für spätere Lesbarkeit, nicht für aktuelle Tastenanschlageinsparungen.
Sie erhalten eine Lösung für Ihr Problem, aber Sie sollten etwas beachten. Die Art und Weise, wie Sie die Funktion schreiben, verhindert eine Kopierselektion wie NVRO.
Der Standard autorisiert Compiler, unbrauchbare Kopien von temporären zu überspringen, aber es existieren einige Richtlinien, um die Bedingung zu erfüllen, um die Optimierung zu ermöglichen.
Im Funktionskörper müssen Sie entweder dasselbe benannte Objekt und nichts anderes zurückgeben oder immer eine Objektkonstruktion zurückgeben. Mischen Sie die beiden und Sie verlieren die sehr wertvolle Optimierung.
Tags und Links c++ c++11 return default-value default-constructor