C++ 将静态私有映射初始化为空

C++ 将静态私有映射初始化为空,c++,map,C++,Map,我有一个静态映射,它是私有数据成员。如何在实现文件中初始化它,使其初始容器为空?它不是常量。重要的是,开始时容器中没有任何内容。这个怎么样(如果我理解正确): std::map YourClass::YourMember=std::map(); 标题: class XXX { private: static std::map<X,Y> the_map; // declares static member // ... XXX类{ 私人: static std::map\u

我有一个
静态映射
,它是
私有
数据成员。如何在实现文件中初始化它,使其初始容器为空?它不是常量。重要的是,开始时容器中没有任何内容。

这个怎么样(如果我理解正确):

std::map YourClass::YourMember=std::map();
标题:

class XXX {
private:
    static std::map<X,Y> the_map; // declares static member
// ...
XXX类{
私人:
static std::map\u map;//声明静态成员
// ...
实施文件:

std::map<X,Y> XXX::the_map; // defines static member
std::map XXX::the_map;//定义静态成员
这将在程序初始化代码中插入映射的构造函数调用(并在清理中插入析构函数)。但要小心-不同转换单元之间的静态构造函数顺序尚未定义。

如果在类定义中声明,则必须在实现中定义它:

---test.h---

// includes and stuff...
class SomeClass
{
    private:
        static std::map<int,std::string> myMap;
};
std::map<int,std::string> SomeClass::myMap; // <-- initialize with the map's default c'tor
您也可以提供初始化:

std::map<int,std::string> SomeClass::myMap = std::map<int,std::string>(myComparator);
std::map SomeClass::myMap=std::map(myComparator);

它说我的映射是私有的,因此我的CC文件顶部的默认初始化无效。我不得不将我的typedef移动到public,但将我的成员保持为私有。这就解决了问题。或者干脆
std::map YourClass::YourMember;
@MikeSeymour:没错。只要澄清一下,如果你愿意,你可以给构造函数参数。吹毛求疵:将/声明/在类中和/定义/在实现中。
std::map<int,std::string> SomeClass::myMap = std::map<int,std::string>(myComparator);