2016-09-23 5 views
1

私はX個のクラスを作成する必要があるC++アプリケーションを開発しています。クラスAAA、BBB、およびCCCとしましょう。各クラスは、私が処理する必要があるオブジェクトの1つのタイプに対応しています。 一方、私はCVSタイプの入力ファイルを持っています。その入力ファイルの一例は、この1のようになります。だから、C++ 11不明なクラスのオブジェクトを作成する

AAA,3432443,433434,11111,45678 
AAA,8778776,786698,22222,86881 
BBB,4452332,112234,34543,87734 

、私はその入力ファイルを解析する必要があり、ラインの最初の要素(AAA、BBB、CCC)によると、私が作成する必要がありますその行にある他の値を格納する対応するオブジェクト。 しかし、私は次のように、条件文の連鎖を使用するために、アプリケーションで可能なクラス(AAA、BBB、CCC)「を埋め込まれた」ことはできません。代わりに if (token == "AAA") then AAA aaa = new AAA (params);

  • アプリケーションは、から独立していなければなりませんオブジェクトを作成するモジュールを変更することなく、将来DDD、EEE、... ZZZクラスを追加することができます(条件を使用する場合は、たとえば、if (token == "DDD") then DDD ddd = new DDD(params)を追加する必要があります)。これは禁止されています
  • 現在の実行で可能なクラスタイプを提供する設定ファイルを作成しました: AAA BBB CCC ... このようにして、このクラスの型をループし、入力ファイル行の最初の要素から読み込んだものと比較できます。しかし、私は未知のクラスのオブジェクトをどのように作成できるかという問題に悩まされています。 ここで "retrieved_type_from_input_file"は、作成すべきクラスの有効なタイプを含む変数です:AAA ... ZZZ
  • 私はジェネリックプログラミングを考えています。何かのように: T object = new T(params); 私はこれをクラス内でコーディングすることはできますが、実装ではクラスの本名が必要です。
  • 私は、誰かが継承する抽象的な親クラス(「Thing」)を作成する、ある種のFactoryパターンの実装も考えています(クラスAAA:public Thing)。しかし、私が見つけたすべてのモデルは、オブジェクトを作成する瞬間に、コードのある場所でクラスの名前を明示的に参照します。

助けてください。 ありがとうございます!私は推測してい

+0

「工場パターン」を参照してください。 – Peter

+0

いくつかの書式設定ができれば、読みやすくなります。ありがとう。 –

+0

C++にはリフレクションがありません。 –

答えて

0

は、あなたはコードジェネレータを必要としている:

ステップ1.の.cppファイルは、コンフィギュレーションファイルに基づいて、.Hのクラスを生成するプログラムを書きます。

あなたはexeファイルを構築するために、このステップで生成されたクラスの

ステップ2.メイクの使用をクラスのオブジェクトを宣言/作成alseすることができます。

これは私の大まかなアイデアであり、他人の可能性を探しています。

+0

こんにちは、どうやってやりましたか?工場やコードジェネレーターなどを使用していますか? – vsmph

0

ファクトリメソッドパターン+ Boost.Plugin

関連する問題