Wenn ich einen std::map<int, char>
haben, ist es schön und einfach zu initialisieren:initialisieren std :: map, default-rechnerisch ermittelten Werte mit
std::map<int, char> myMap =
{
{ 1, 'a' },
{ 2, 'b' }
};
Wenn mein Wert-Typ einen Standardkonstruktor hat, wie ich es wie so initialisieren kann :
struct Foo
{
char x;
};
std::map<int, Foo> myMap =
{
{ 1, Foo() },
{ 2, Foo() }
};
aber mein Wert-Typ annehmen, hat einen Standard-Konstruktor, ist aber unhandlich Typ:
std::map<int, yourNamespace::subLibrary::moreLevels::justBecause::Thing> myMap =
{
// What goes here? I don't want to type
// yourNamespace::subLibrary::moreLevels::justBecause::Thing again.
};
Kurz vor einer using
Deklaration, um den Werttyp tastaturfreundlicher zu machen, gibt es eine Möglichkeit, die map
mit einer Reihe von Schlüsseln zu initialisieren, die alle eine standardkonstruierte yourNamespace::subLibrary::moreLevels::justBecause::Thing
verwenden? Wie kann ich signalisieren, dass der abgebildete Wert standardmäßig seinem Typ entspricht?
Ich dachte, ich könnte, und ich habe es versucht, und es hat nicht funktioniert ... weshalb ich hierher kam. Weiteres Hervorheben zeigt, dass es _in general_ funktioniert, aber nicht, wenn der Werttyp nicht kopierkonstruierbar ist. Weißt du warum nicht? – Chowlett
@Chowlett In Bezug auf Ihre Follow-up-Frage verweise ich Sie auf [diese Antwort] (http://stackoverflow.com/a/7232135/7359094). –
Ah. Das würde es erklären. Bin ich also auf diese Weise komplett initialisiert? Ich stelle fest, dass sogar 'myMap = {{1, Foo()}};' aus vermutlich genau demselben Grund fehlschlägt. – Chowlett