类似于std :: map或std :: vector的构造函数

SH.*_*x90 12 c++ vector std c++11

我正在创建一个类,我想知道如何创建类似于std::mapstd::vector样式的构造函数.

std::map<std::string, std::string> map = {
    {"foo", "bar"},
    {"biz", "buz"},
    {"bez", "boz"}
};
Run Code Online (Sandbox Code Playgroud)

不同之处在于我不希望我的班级要求接受的类型,就像std::map那样.

std::map<std::string, std::string>
Run Code Online (Sandbox Code Playgroud)

我希望我的班级接受这种风格的论点:

{
    {"foo", "bar"},
    {"biz", "buz"},
    {"bez", "boz"}
};
Run Code Online (Sandbox Code Playgroud)

但是有定义的类型.(std :: string,Typer)

'Typer'是一个我将作为值插入的类std::map.

Rei*_*ica 24

如果我正确理解你的问题,你需要一个构造函数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"}
  };
}
Run Code Online (Sandbox Code Playgroud)

实例