2014-12-13 6 views
0

Я хочу добавить std :: map m_mapName в список инициализации конструктора.Добавление std :: map в список инициализации ctor

Если я введу m_mapName() в списке инициализации конструктора, компилятор примет его.

Но, это правильно? Если это неверно, как добавить карту в список инициализации?

Затем, я делаю несколько вложений на карте. Что является более элегантным способом вставки значений, поэтому я не вызываю функцию вставки каждый раз?


Подробнее:

Так же, как в: C++, can I statically initialize a std::map at compile time?, компилятор не принимает синтаксис как:

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

Невозможно использовать Boost. Мой код выглядит следующим образом:

* 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

Вы прочитали ответы на вопрос, который вы связали, чтобы сказать, как это сделать? –

+0

Да, я это сделал. Сообщение не отвечает на мой конкретный вопрос: почему компилятор согласился с тем, как я добавил карту в список инициализации, и если она правильная? – Developer

+0

Я также не могу использовать Boost. – Developer

ответ

0

Да, ваш код правильно. И связанный вопрос показывает, что инициализировать его с помощью

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

Подход выше дает мне: нет подходящей функции для вызова на 'std :: map , std :: allocator >> :: map (<список инициализаторов с закрытыми скобками>) ' – Developer

+0

Изменен тип от' uint16_t 'до' int '. Код выглядит следующим образом: className :: className() : m_mapName { {0, 0}} {} К сожалению, я догадываюсь '{' перед 'm_mapName'_ и _expected конструктором, деструктором или преобразованием типов перед' { 'token_ – Developer

+0

Я предполагаю, что мой код так работает, потому что каким-то образом m_mapName() вызывает некоторый конструктор по умолчанию. Но я не уверен – Developer