初始化静态多图类成员

时间:2013-07-05 21:46:12

标签: c++ static initialization multimap

我需要一个类型为multimap的静态成员

我检查了在类声明

之后必须初始化(或定义)静态成员

问题在于我没有找到正确的sintax来初始化(定义)我声明的多重映射

这是我的多图宣告:

 namespace sctg
 {
        class Buffer : public BufferInterface
        {
           public:
                  ...
           private:

                  static std::multimap<std::string, std::pair<sc_core::sc_time, sc_core::sc_time> >    timeStampPackets; 
       };
 }

我正在使用C ++ 98。

1 个答案:

答案 0 :(得分:1)

如果您要做的只是定义它,而不是添加任何成员,那么您只需说:

std::multimap<std::string, std::pair<sc_core::sc_time, sc_core::sc_time> > Buffer::timeStampPackets;

在类定义之外,在类的.cpp文件中。就是这样!

但是如果你对地图类型使用typedef,那么生活会更简单:

namespace sctg
{
  class Buffer : public BufferInterface
  {
  public:
    //  ...
  private:
    typedef std::multimap<std::string, std::pair<sc_core::sc_time, sc_core::sc_time> > TimeStampMap;

    static TimeStampMap  timeStampPackets;   // declare
  };
}

.cpp档案中:

namespace sctg
{
  Buffer::TimeStampMap Buffer::timeStampPackets;  // define
}

如果您想将成员插入地图......

如果你正在使用C ++ 11,你可以像这样初始化成员:

TimeStampMap Buffer::timeStampPackets{ { {}, { sc_core::sc_time_stamp(), sc_core::sc_time_stamp() } } };

如果您不能使用C ++ 11,那么最好的选择是:

TimeStampMap Buffer::timeStampPackets = getTimeStampPackets();

该函数返回包含所需数据的地图:

TimeStampMap getTimeStampPackets()
{
  TimeStampMap result;
  result.insert( TimeStampMap::value_type("", std::pair<sc_core::sc_time, sc_core::sc_time>()) );
  return result;
}