Конструктор похож на std:: map или std::vector в классе

Я создаю класс, и я хочу знать, как создать конструктор, похожий на стиль std::map или std::vector.

std::map<std::string, std::string> map = {
    {"foo", "bar"},
    {"biz", "buz"},
    {"bez", "boz"}
};

Разница в том, что я не хочу, чтобы мой класс запрашивал типы, которые хотят принять, как это делает std::map.

std::map<std::string, std::string>

Я хочу, чтобы мой класс принимал этот стиль аргументов:

{
    {"foo", "bar"},
    {"biz", "buz"},
    {"bez", "boz"}
};

Но с определенным типом. (std::string, Typer)

"Typer" - это класс, который я вставляю как значение в std::map.

Ответ 1

Если я правильно понял ваш вопрос, вы хотите, чтобы конструктор принял std::initializer_list<std::pair<std::string, Typer>>, например:

struct Typer
{
  std::string data;

  Typer(const char *s) : data(s) {}
};


struct MyClass
{
  MyClass(std::initializer_list<std::pair<std::string, Typer>> i)
    : myMap(begin(i), end(i))
  {}

  std::map<std::string, Typer> myMap;
};

int main()
{
  MyClass m = {
    {"foo", "bar"},
    {"biz", "buz"},
    {"bez", "boz"}
  };
}

Пример Live

Ответ 2

typedef std::map<std::string, Typer> MyType;