Ich habe das folgende shared_ptr
zu einem map
:
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?
std::map
hat einen Initialisierungslisten-Konstruktor:
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:
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%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.)
Tags und Links c++ c++11 shared-ptr brace-initialization stdmap