C++ 在不知道密钥的情况下初始化静态映射

C++ 在不知道密钥的情况下初始化静态映射,c++,c++11,static-members,C++,C++11,Static Members,是否可以在不知道密钥的情况下初始化静态映射 我有一个a级,我必须使用 static std::map<ObjClass *, int> n_map; 如何解决这个问题?静态类数据成员需要定义和声明。初始值设定项可以用于非常量表达式成员的定义,也可以用于常量表达式的声明 例如: foo.h: #include <map> #include <string> struct Foo { // declaration and initializer

是否可以在不知道密钥的情况下初始化静态映射

我有一个a级,我必须使用

static std::map<ObjClass *, int> n_map; 

如何解决这个问题?

静态类数据成员需要定义和声明。初始值设定项可以用于非常量表达式成员的定义,也可以用于常量表达式的声明

例如:

foo.h:

#include <map>
#include <string>

struct Foo
{
    // declaration and initializer
    static constexpr int usageCount = 0;

    // only declaration
    static const double val1;
    static       double val2;

    // only declaration
    static std::map<int, std::string> theMap;
};
#include <foo.h>

// only definition (only required if ODR-used)
constexpr int Foo::usageCount;

// definition and initializer (initializer required, since const)
const double Foo::val1 = 1.5;

// only definition (implicitly statically-initialzied (i.e. zeroed))
double Foo::val2;

// definition and initializer
std::map<int, std::string>> Foo::theMap { { 1, "abc" }
                                        , { 2, "def" }
                                        };
#包括
#包括
结构Foo
{
//声明和初始值设定项
静态constexpr int usageCount=0;
//唯一声明
静态常数双值1;
静态双val2;
//唯一声明
静态std::映射主题图;
};
foo.cpp:

#include <map>
#include <string>

struct Foo
{
    // declaration and initializer
    static constexpr int usageCount = 0;

    // only declaration
    static const double val1;
    static       double val2;

    // only declaration
    static std::map<int, std::string> theMap;
};
#include <foo.h>

// only definition (only required if ODR-used)
constexpr int Foo::usageCount;

// definition and initializer (initializer required, since const)
const double Foo::val1 = 1.5;

// only definition (implicitly statically-initialzied (i.e. zeroed))
double Foo::val2;

// definition and initializer
std::map<int, std::string>> Foo::theMap { { 1, "abc" }
                                        , { 2, "def" }
                                        };
#包括
//仅定义(仅当使用ODR时才需要)
constexpr int Foo::usageCount;
//定义和初始值设定项(需要初始值设定项,因为常量)
常数双Foo::val1=1.5;
//仅定义(隐式静态初始化(即归零))
双Foo::val2;
//定义和初始值设定项
std::map>Foo::theMap{{1,“abc”}
,{2,“def”}
};

我的问题是我不知道哪些是keys@user2369478:然后在知道键后填充地图…?我想在知道键后填充地图keys@user2369478:那就这样做!是的,但是如果我只在我的file.cpp中定义映射,而不使用初始值设定项,则会出现上述错误