Я хочу виртуальный класс, подобный этому:
class Configuration
{
public:
enum EPromptId;
virtual CString getPrompt( EPromptId promptId ) = 0;
private:
};
Чтобы каждая производная конфигурация могла иметь свой собственный набор EPromptIds
class Configuration1 : public Configuration
{
public:
enum EPromptId{
epid_HappyBirthday
};
CString getPrompt( EPromptId promptId ){
return "";
}
private:
};
class Configuration2 : public Configuration
{
public:
enum EPromptId{
epid_JummpingJehoshaphat
};
CString getPrompt( EPromptId promptId ){
return "";
}
private:
};
Это терпит неудачу, поскольку каждый класс должен внедрить виртуальную функцию с параметром Configuration :: EPromptId (не Configuration1 :: EPromptId или Configuration2 :: EPromptId, как в этом коде).
Можно ли заставить базовый класс распознавать тип параметра, но определять значения по-разному в каждом производном классе (возможно, не используя перечисления, но сохраняя его строго типизированным, т.е. не используя int).
РЕДАКТИРОВАТЬ: я хочу две разные конфигурации для двух разных «приложений». Приглашения могут храниться в таблице базы данных, но каждое «приложение» будет иметь свою собственную таблицу. Указатель на базовый класс конфигурации содержится в классе, который взаимодействует с некоторым оборудованием (т. Е. Который выполняет фактическое отображение). Аппаратное обеспечение представляет собой устройство ввода-вывода, которое можно использовать для запроса и получения пользовательского ввода. Когда класс оборудования создан, ему будет передан указатель на правильный класс конфигурации, поэтому при запросе отобразятся правильные подсказки.