Wie wird ein Objekt, das standardmäßig initialisiert wird, elegant zurückgegeben?

7

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%     
xmllmx 14.09.2013, 06:06
quelle

5 Antworten

16

Das ist sehr viel prägnanter:

%Vor%     
goji 14.09.2013, 06:10
quelle
8

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.

%Vor%

Und benutze es als:

%Vor%

Online-Demo .

Sie können diese Lösung überall verwenden , sogar in Vorlagen:

%Vor%

Ich hoffe, das hilft.

    
Nawaz 14.09.2013 06:18
quelle
2

Wie wäre es mit typedef ?

%Vor%

Und dann S verwenden.

Siehe HIER

    
P0W 14.09.2013 06:14
quelle
2

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.

    
Escualo 14.09.2013 06:36
quelle
0

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.

    
galop1n 14.09.2013 09:51
quelle