2014-12-13 40 views
0

我想在构造函数的初始化列表中添加一个std :: map m_mapName。将std :: map添加到ctor的init列表中

如果我在构造函数的init列表中键入m_mapName(),编译器会接受它。

但是,它是正确的吗? 如果不正确,我该如何将映射添加到初始化列表中?

然后,我在地图上做了几次插入。什么是插入值的更优雅的方式,所以我不会每次都调用插入函数?


更多信息:

就像在:C++, can I statically initialize a std::map at compile time?,编译器不接受的语法,如:

std::map<int, char> example = { (1,'a'), 
          (2, 'b'), 
          (3, 'c') }; 

无法使用升压。 我的代码看起来是这样的:

* className.h:*

typedef std::map <uint16_t, int> mapType; 

typedef std::pair <uint16_t, int> mapPair; 

className{ 

private: 

    mapType m_mapName; 

} 

* className.cpp:*

className::className() : 

m_mapName() 

{ 

... 

m_mapName.insert(mapPair(someMapValue1, 0)); 

m_mapName.insert(mapPair(someMapValue2, 0)); 

m_mapName.insert(mapPair(someMapValue3, 0)); 
+0

你读过关于你说的问题的答案,确切地说如何做到这一点? – 2014-12-13 00:58:21

+0

是的,我做到了。该发布不回答我的具体问题:为什么编译器接受我将映射添加到init列表的方式,以及它是否正确? – Developer 2014-12-13 01:13:46

+0

我也不能使用Boost。 – Developer 2014-12-13 01:17:53

回答

0

是的,你的代码是正确的。并链接的问题显示什么来初始化它与

className::className() 
:m_mapName{ 
    {someMapValue1, 0}, 
    {someMapValue2, 0}, 
    {someMapValue3, 0}} 
{} 
+0

上面的方法给了我: 没有匹配函数调用'std :: map ,std ::分配器 >>映射(<括号内含的初始化器列表>)' – Developer 2014-12-13 01:41:05

+0

将类型从'uint16_t'更改为'int'。代码如下:className :: className() :m_mapName { {0,0}} {}不幸的是,我在'{'之前'm_mapName'_和_expected构造函数,析构函数或类型转换'{' 'token_ – Developer 2014-12-13 01:46:10

+0

我想我的代码是这样工作的,因为m_mapName()调用了一些默认的构造函数。但我不确定 – Developer 2014-12-13 02:01:37