Конструктор похож на 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;