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

时间:2014-02-21 15:34:31

标签: c++ c++11 vector std

我正在创建一个类,我想知道如何创建类似于std::mapstd::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上作为值插入的类。

2 个答案:

答案 0 :(得分: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"}
  };
}

Live example

答案 1 :(得分:3)

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