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

时间:2012-06-28 14:58:40

标签: c++ map

我有一个static map数据成员private。如何在实现文件中初始化它,以使它的初始容器为空?它不是const。重要的是,开始时这个容器中没有任何东西。

3 个答案:

答案 0 :(得分:9)

部首:

class XXX {
private:
    static std::map<X,Y> the_map; // declares static member
// ...

实施档案:

std::map<X,Y> XXX::the_map; // defines static member

这会将您的映射的构造函数调用插入到程序初始化代码中(以及清理中的析构函数)。但要小心 - 不同翻译单元之间的静态构造函数的顺序是未定义的。

答案 1 :(得分:5)

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

std::map<T,T2> YourClass::YourMember = std::map<T,T2>();

答案 2 :(得分:3)

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

--- test.h ---

// includes and stuff...
class SomeClass
{
    private:
        static std::map<int,std::string> myMap;
};

--- test.cpp ---

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);