次のような仮想クラスが必要です。
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 を使用しない)。
編集: 2 つの異なる「アプリケーション」に対して 2 つの異なる構成が必要です。プロンプトは db テーブルに保持できますが、各「アプリケーション」には独自のテーブルがあります。基本構成クラスへのポインターは、一部のハードウェアにインターフェースするクラス (つまり、実際の表示を行うクラス) に含まれています。ハードウェアは、ユーザー入力の要求と受信に使用できる io デバイスです。ハードウェア クラスが作成されると、正しい構成クラスへのポインターが渡されるため、要求されたときに正しいプロンプトが表示されます。