Je possède une classe un peu comme :
class Object {
public:
struct Flag {
const uint32_t bit = 0;
const wchar_t* name = L"";
const wchar_t sign = L"";
}
static std::map Flags;
}
Je suis actuellement sur VS2015, mais je veux prendre en charge clang et gcc (les derniers). Mon problème est que je ne parviens pas à comprendre comment initialiser réellement cette carte avec des données.
J'ai essayé de le mettre en ligne, comme ceci :
static std::map Flags = {
{ "FOO1", { 0, L"FOO1", L'A' } },
{ "FOO2", { 1, L"FOO3", L'B' } },
{ "FOO3", { 2, L"FOO3", L'C' } }
}
Mais ça m'a signalé que seuls les types intégraux constants peuvent être dans la classe. D'accord ! J'ai donc laissé la déclaration dans la définition de la classe (comme indiqué dans le premier extrait de code), et j'ai mis ceci dans le cpp associé :
static std::map Object::Flags = {
{ "FOO1", { 0, L"FOO1", L'A' } },
{ "FOO2", { 1, L"FOO3", L'B' } },
{ "FOO3", { 2, L"FOO3", L'C' } }
}
Maintenant cela signale que :
error C2440: 'initializing': cannot convert from 'initializer list' to 'std::map,std::allocator>>'
Le truc, c'est que j'aurais juré que j'avais déjà réussi à le faire fonctionner, donc je pense que je dois avoir la syntaxe incorrecte. Si ce n'est pas le cas, clairement je ne comprends pas comment charger une carte statique dans le namespace d'une classe.