私はパーサーが知る必要があるあらゆる種類のファイル(現在はSOURCE、HEADER、RESOURCE)を保持する "fileType" enum
のクラスを持っています。私のような一般的な何かをできるように私の解析機能が欲しい:拡張可能なパーサーの設計
if(token == some_known_fileType)
put_nextToken_in_the_list_for_that_fileType();
else
return an_error();
しかし、キャッチがあります:私は単にTarget
のサブクラスで知らfileTypesプロパティを拡張できるようにしたいのですが、enum
を拡張正しい方法で、私がこれをやった方法についてはBase enum class inheritanceを参照してください。私は上記のコードを変更するのではなく、ターゲット全体を一般的に拡張したいだけです。 C++ 0Xが必要な場合があり、大歓迎です。
ありがとうございます!
UPDATE:ここでそれを説明しようとすると、いくつかの低減クラス宣言を投稿すると、私は自分のデザインが壊れて実現し、私は私のクラス構造の深すぎたfileTypeの専門をプッシュしようとしました。私はすべての既知のタイプの完全なリストを格納する場所は1つだけ必要でしたが、そうしようとすると、一度に2つの場所でそのリストにアクセスできるようになりました。私は今、すべてのfileTypesのリストは、SOURCE、HEADERなどのキーワードがどこから読み込まれ、そこから一般的に扱われるべきであることを認識しています。私は1つの場所に完全なリストを格納し、後で "巨大な" enum
を通してそのリストにアクセスします。ここでは論理的な選択肢としてstd::map<fileType, std::set<std::string> >
が頭に浮かびます。具体的にはそれぞれの場合はset
という名前が付けられています。あなたの応答にbraincandyをありがとう!どんな考えもまだ歓迎されています。
コードをもう少し追加してもよろしいですか?私はそれがあなたがしたいことが分かりません... – ronag