Я пытаюсь создать структурный массив, который связывает входные строки с классами следующим образом:
struct {string command; CommandPath cPath;} cPathLookup[] = {
{"set an alarm", AlarmCommandPath},
{"send an email", EmailCommandPath},
{"", NULL}
};
, который будет использоваться следующим образом:
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;
}
Очевидно, что этот код не имеет смысла, но я думаю, что мое намерение очевидно, - в зависимости от ввода я бы хотел, чтобы cPath инициализировался как новый AlarmCommandPath или новый EmailCommandPath. Я мог бы справиться с этим с помощью функции, возвращающей экземпляр в зависимости от входных данных, но целая последовательность ifs кажется просто не элегантной.
Следует также отметить, что в случае, если это не очевидно и не важно, что AlarmCommandPath и EmailCommandPath являются производными от CommandPath, а CommandPath является абстрактным классом.
Спасибо за любую помощь, которую вы можете предложить.
РЕДАКТИРОВАТЬ: Я только что заметил, что, несмотря на абстрактность CommandPath, у меня есть объявление:
CommandPath *cPath = NULL;
в рабочем коде. Почему это компилируется?