我正在创建一个类,我想知道如何创建类似于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
上作为值插入的类。
答案 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"}
};
}
答案 1 :(得分:3)
typedef std::map<std::string, Typer> MyType;