Wie zum initialisieren einer statischen std::unordered_map von einer Art Eigenschaft?
Gegeben, die folgende Eigenschaft, wie kann ich die initialisieren Fields
mit einigen std::pair
s?
template <>
struct ManagerDataTrait<Person>
{
static const std::unordered_map<std::string, std::string> Fields;
//...
};
Versuchte ich mit einem lambda aber Visual Studio sagt, dass Fields
ist nicht eine Entität, die explizit darauf spezialisiert.
template <>
const std::unordered_map<std::string, std::string> ManagerDataTrait<Person>::Fields = []{
std::unordered_map<std::string, std::string> fields;
fields.insert(std::make_pair("height", "FLOAT"));
fields.insert(std::make_pair("mass", "FLOAT"));
return fields;
};
Wenn es keine Möglichkeit gibt, statische-Mitglieder wie folgt in Merkmale, welche alternativen habe ich, die Informationen zu speichern in einer Eigenschaft? (Fields
hält eine SQL-Datenbank-Struktur.)
Update: Das Mitglied kann auch const
aber das sollte nicht der Punkt sein.
- Für Ihren lambda etwas arbeiten müssten, um tatsächlich laufen die lambda, aber Sie haben nicht versucht, das zu tun (Sie haben nur versucht zu konstruieren, die hash-map aus dem lambda, das ist nicht gültig, aber sicherlich nicht die lambda.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kerrek SB ' s Antwort wäre die richtige Antwort im Allgemeinen:
(N. B. keine
template<>
weil Sie definieren ein Mitglied einer Spezialisierung keine Spezialisierung)Aber das ist nicht unterstützt durch Visual C++, so dass die andere alternative ist die Initialisierung der Karte mit einem Funktionsaufruf und Rückgabe einer Karte mit dem gewünschten Inhalt von der Funktion:
Lambda ist nur syntaktischer Zucker für die gleiche Sache zu tun, und ich bin nicht sicher, es ist übersichtlicher zu nutzen, eine lambda, weil die syntax ist ein bisschen hässlicher.
Erkennst du, dass du initialisieren können Karten von verspannt Listen?
template <>
, die Sie wies darauf hin, in einem mittlerweile gelöschten Kommentar. Könnten Sie bitte fügen Sie diese, um Ihre Antwort? Ich werde Kennzeichnen, dass Sie dann akzeptiert.Visual C++ unterstützt nun die statische Initialisierung von verspannt-Listen, so dass Sie könnte so etwas wie dieses: