文字列からクラスへのオブジェクトのインスタンス化: C での探索
C では、オブジェクトを含む文字列からオブジェクトを生成できるかという疑問が生じます。クラス名を使用することで、派生クラスと if-else ブロックに関する徹底的な知識を必要とせずに済みますか?リフレクション機能を備えた C# とは異なり、C にはこのための組み込みメカニズムがありません。ただし、この機能を実現できる回避策があります。
1 つのアプローチには、型マッピングにマップを使用することが含まれます。オブジェクトを生成するテンプレート関数 createInstance と、クラス名を対応する関数ポインターにマップする map_type マップを作成します。これにより、クラス名文字列を使用してマップにアクセスするだけで新しいインスタンスを取得できるようになります。
もう 1 つの解決策は、クラスが実行時に自身を登録できるようにすることです。 BaseFactory には静的メソッド getMap があり、map_type ポインターを返します。このポインターは最初の呼び出し時に作成され、決して削除されません。クラスは DerivedRegister 構造体を使用して自身を登録し、クラス名を引数として渡すことができます。このアプローチにより、新しいクラスがマッピング プロセスに自動的に組み込まれるようになります。
共有基本クラスのない無関係な型の場合は、boost::variant を使用して戻り値に対応できます。 boost::variant は共用体のように機能し、その内部型に関する情報を伝えます。この概念を利用することで、クラス名を boost::variant オブジェクトを返す関数ポインタにマップできます。これにより、必要な型インスタンスを保持できます。
C では、Boost.Function を使用してオブジェクトを分離するオプションがあります。特定の関数または型からのコード。マッピング構造は、クラス名を Boost.Function インスタンスにマップするマップを使用します。これを呼び出してオブジェクトを作成できます。
これらのメソッドは、C でクラス名の文字列表現からオブジェクトを動的に生成する方法を提供します。手動構成が必要ですが、柔軟性があり、ファクトリ クラスでの徹底的な分岐ロジックの必要性を回避します。
以上がクラス名を含む文字列から C オブジェクトをインスタンス化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。