Я хотел бы посмотреть, как этот пример существующего кода сможет воспользоваться функцией списка инициализаторов C++ 0x.Пример списка инициализаторов C++ 0x
Example0:
#include <vector>
#include <string>
struct Ask {
std::string prompt;
Ask(std::string a_prompt):prompt(a_prompt){}
};
struct AskString : public Ask{
int min;
int max;
AskString(std::string a_prompt, int a_min, int a_max):
Ask(a_prompt), min(a_min), max(a_max){}
};
int main()
{
std::vector<Ask*> ui;
ui.push_back(new AskString("Enter your name: ", 3, 25));
ui.push_back(new AskString("Enter your city: ", 2, 25));
ui.push_back(new Ask("Enter your age: "));
}
Будет ли поддерживать что-то вроде этого:
example1:
std::vector<Ask*> ui ={
AskString("Enter your name: ", 3, 25),
AskString("Enter your city: ", 2, 25),
Ask("Enter your age: ")
};
Или он должен иметь литералов как это ?:
example2:
std::vector<Ask*> ui ={
{"Enter your name: ", 3, 25},
{"Enter your city: ", 2, 25},
{"Enter your age: "}
};
Если да, то как будет выполняться различие между AskString и Ask?
Если вы используете std :: vector, вы не можете добавить AskString! –
mmmmmmmm
Я думал, что AskString была функцией, которая возвращала Ask, глупый. – rlbond
Это очень неправильно. AskString - это отдельный тип, который использует Ask как базовый класс. То, что вы называете функцией, является конструктором. Они очень разные. – jmucchiello