Initialisierung von std :: shared_ptrstd :: map mit braced-init

8

Ich habe das folgende shared_ptr zu einem map :

%Vor%

und ich möchte es mit braced-init initialisieren. Ist es möglich?

Ich habe es versucht:

%Vor%

aber das gibt den folgenden Fehler, wenn mit Xcode 6.3 kompiliert wird:

%Vor%

Ich habe andere Varianten des ersten Parameters (1000.0) ohne Erfolg ausprobiert.

Kann jemand helfen?

    
ksl 06.04.2016, 08:32
quelle

5 Antworten

8

std::map hat einen Initialisierungslisten-Konstruktor:

%Vor%

Wir können mit diesem Konstruktor ganz einfach eine Map erstellen:

%Vor%

Um es in make_shared zu verwenden, müssen wir angeben, welche Instanz von initializer_list wir bereitstellen:

%Vor%

Das sieht wirklich ungeschickt aus; aber wenn Sie das regelmäßig brauchen, können Sie es mit Aliasen aufräumen:

%Vor%

Sie könnten stattdessen lieber eine Vorlagenfunktion definieren, um den Anruf zu umbrechen:

%Vor%     
Toby Speight 06.04.2016, 08:55
quelle
1

Ihr Problem besteht darin, dass Sie keine Klammern in Ihren Initialisierer eingefügt haben. Ich brauchte Folgendes, um es zum Laufen zu bringen:

%Vor%

Die doppelte std::map<double, std::string> Bugs mich. Es sollte wirklich in der Lage sein, einen von ihnen mit dem anderen auszuarbeiten ... aber gcc 5.3.0 würde keinen Ball spielen.

Sie werden definitiv die Doppelstreben brauchen. (Einmal sagen Sie, dass Sie eine Karte initialisieren, einmal um jeden Eintrag zu begrenzen.)

    
Martin Bonner 06.04.2016 08:55
quelle
0

Sie können es ohne std::make_shared machen:

%Vor%     
Andrei R. 06.04.2016 09:02
quelle
-2

Etwas Ähnliches sollte es tun ...

%Vor%

oder als oneliner

%Vor%

(Sorry, zuerst verpasste die Anforderung für die Initialisierungsliste)

    
Jojje 06.04.2016 08:43
quelle
-4

Ändern Sie den Typ des Schlüssels.

double ist ein falscher Typ für Schlüssel, da es kein operator== dafür gibt und verschiedene Bytefolgen denselben Fließkommawert darstellen können.

    
jonezq 06.04.2016 08:49
quelle