Je suis en train de créer un tableau de la structure qui relie les chaînes d'entrée aux classes comme suit:classe tableau de structure de recherche en C++
struct {string command; CommandPath cPath;} cPathLookup[] = {
{"set an alarm", AlarmCommandPath},
{"send an email", EmailCommandPath},
{"", NULL}
};
qui sera utilisé comme suit:
CommandPath *cPath = NULL;
string input;
getline(cin, input);
for(int i = 0; cPathLookup[i] != ""; i++) {
if(cPathLookup[i].command == input)
cPath = new cPathLookup[i].cPath;
}
De toute évidence, ce code n'a pas de sens, mais je pense que mon intention est apparente - en fonction de l'entrée, je voudrais que cPath soit initialisé comme un nouveau AlarmCommandPath ou un nouveau EmailCommandPath. Je pourrais le gérer avec une fonction retournant une instance en fonction de l'entrée, mais toute une séquence d'ifs semble juste inélégante.
Je devrais également noter que, dans le cas où ce n'est pas apparent et important, que AlarmCommandPath et EmailCommandPath sont dérivés de CommandPath, et CommandPath est une classe abstraite.
Merci pour toute aide que vous pouvez offrir.
EDIT: Je viens de remarquer que, malgré CommandPath être abstraite, j'ai une déclaration:
CommandPath *cPath = NULL;
dans le code de travail. Pourquoi cela compile-t-il?
cela peut-il être fait sans allocations de tas? Je veux dire, ces méthodes d'usine peuvent-elles construire un A ou B ou C sur la pile et le retourner en valeur? – Segfault