Search code examples
c++staticstdmap

Static map initialization


I have the following code:

//MyClass.h
class MyClass {
public:
    typedef std::map<std::string, int> OpMap;
    static OpMap opMap_;     
    // (more methods)
};

//MyClass.cpp
//Init opMap_
MyClass::opMap_["x"] = 1; //compilation error

How can I (statically) initialize opMap_?


Solution

  • If you're using C++11, you could use initializer lists:

    //MyClass.h
    class MyClass {
    public:
          typedef std::map<std::string, int> OpMap;
          static OpMap opMap_;
    };
    
    //MyClass.cpp
    MyClass::OpMap MyClass::opMap_ = { 
        { "x", 1 }
    }; 
    

    If you don't have access to a compiler that supports the C++11 standard, you could do the following:

    //MyClass.h
    class MyClass {
    public:
          typedef std::map<std::string, int> OpMap;
          static OpMap opMap_;
    private:
          static OpMap init_map() {
              OpMap some_map;
              some_map["x"] = 1;
              return some_map;
          }
    };
    
    //MyClass.cpp
    MyClass::OpMap MyClass::opMap_ = init_map();