Je voudrais voir comment cet exemple de code existant pourrait tirer parti de la fonction de liste d'initialisation C++ 0x.Exemple de liste d'initialisation C++ 0x
Exemple0:
#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: "));
}
Ne serait-il soutenir quelque chose comme ceci:
Example1:
std::vector<Ask*> ui ={
AskString("Enter your name: ", 3, 25),
AskString("Enter your city: ", 2, 25),
Ask("Enter your age: ")
};
Ou faut-il avoir littéraux comme ça ?:
Example2:
std::vector<Ask*> ui ={
{"Enter your name: ", 3, 25},
{"Enter your city: ", 2, 25},
{"Enter your age: "}
};
Si oui, comment la différence entre AskString et Ask serait-elle traitée?
Si vous utilisez std :: vector vous ne pourriez pas ajouter AskString! –
mmmmmmmm
Je pensais que AskString était une fonction qui renvoyait un Ask, idiot moi. – rlbond
C'est très faux. AskString est un type distinct qui utilise Ask comme classe de base. Ce que vous appelez une fonction est un constructeur. Ce sont des choses très différentes. – jmucchiello