Vorrei vedere come questo esempio di codice esistente sarebbe in grado di sfruttare la funzionalità dell'elenco di inizializzazione C++ 0x.Esempio elenco inizializzatore 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: "));
}
sarebbe sostenere qualcosa di simile:
Esempio 1:
std::vector<Ask*> ui ={
AskString("Enter your name: ", 3, 25),
AskString("Enter your city: ", 2, 25),
Ask("Enter your age: ")
};
o deve avere letterali come questo ?:
Esempio 2:
std::vector<Ask*> ui ={
{"Enter your name: ", 3, 25},
{"Enter your city: ", 2, 25},
{"Enter your age: "}
};
Se sì, come si maneggia la differenza tra AskString e Ask?
Se si utilizza std :: vector non è possibile aggiungere AskString! –
mmmmmmmm
Pensavo che AskString fosse una funzione che restituiva un Ask, sciocco me. – rlbond
Questo è molto sbagliato. AskString è un tipo distinto che usa Ask come sua classe base. Ciò che chiami una funzione è un costruttore. Sono cose molto diverse. – jmucchiello