私は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)。しかし、私が見つけたすべてのモデルは、オブジェクトを作成する瞬間に、コードのある場所でクラスの名前を明示的に参照します。
助けてください。 ありがとうございます!私は推測してい
「工場パターン」を参照してください。 – Peter
いくつかの書式設定ができれば、読みやすくなります。ありがとう。 –
C++にはリフレクションがありません。 –