初始化静态多映射类成员

Initialize static multimap class member

本文关键字:成员 映射 静态 初始化      更新时间:2023-10-16

我需要一个来自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。

如果你只想定义它,而不是向它添加任何成员,那么你只需要说:

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