У меня есть класс Target
с "fileType" enum
, который содержит все виды файлов, о которых мой анализатор должен знать (в настоящее время SOURCE, HEADER, RESOURCE).Мне бы хотелось, чтобы моя функция синтаксического анализа могла делать что-то общее, например:
if( token == some_known_fileType )
put_nextToken_in_the_list_for_that_fileType();
else
return an_error();
Но есть одна загвоздка: я бы хотела иметь возможность просто расширять известные типы файлов с помощью подклассов Target
о том, как правильно расширить enum
, см. Базовое наследование класса enum , как я это сделал.Я не хочу изменять вышеприведенный код, а лишь расширю целевую половину.C ++ 0X может потребоваться и очень приветствуется.
Спасибо!
ОБНОВЛЕНИЕ: После попытки объяснить это здесь и опубликования некоторых сокращенных объявлений класса я понял, что мойдизайн не работает, и я попытался слишком сильно углубить специализацию fileType в моей структуре классов.Мне нужно было только одно место для хранения полного списка всех известных типов, но, пытаясь это сделать, я случайно вынудил дизайн иметь доступ к этому списку в двух местах одновременно.Теперь я понимаю, что список всех типов файлов должен быть там, где читаются ключевые слова SOURCE, HEADER и т. Д., И обрабатываться * в общем случае с их помощью.Я буду хранить полный список в одном месте, и позже получу доступ к этому списку через «огромный» enum
.std::map<fileType, std::set<std::string> >
появляется в моей голове как логический выбор, вместо отдельного имени set
для каждого конкретного fileType
.Спасибо за умственные способности в ваших ответах, хотя!Любые мысли все еще приветствуются.