Инициализируйте ваш класс с помощью конструктора, который принимает std :: map в качестве параметра с инициализатором в скобках - PullRequest
1 голос
/ 11 апреля 2019

У меня есть простой класс с конструктором, который принимает std::map.Я хочу инициализировать класс парой заключенного в паяльник списка инициализатора.Вот что я попробовал:

//X.h
#include <map>

template <class key, class value>
class X{
public:
    X(const std::map<key, value>& map) : m_map{map} {}

private:
    typename std::map<key, value> m_map;
};
//main.C

int main() { 
    std::map<char, int> m = {{'a', 5}};
    X<char, int> x = m; //valid
    X<char, int> y = {{'a', 5}}; // error
}

Но я получаю ошибку.Я предполагаю, что мне нужно реализовать другой конструктор, чтобы иметь возможность инициализировать списком инициализаторов, но я не знаю как.

1 Ответ

5 голосов
/ 11 апреля 2019

Верьте или нет, вам не хватает другой пары фигурных скобок. Это должно работать:

X<char, int> y = { { {'a', 5 } } };
                 ^ ^ ^~~~~~~~~
                 | | initializes map element
                 | initializes the map
                 initializes your object
...