1

実行時に識別される型 (class、struct、enum、int、float、double など) を判別し、それらを宣言し、実行時にそれらの型のメソッドを呼び出すことができる、優れた C++ リフレクション API (Microsoft API など) が必要です。 .

よろしく、

ウスマン

4

2 に答える 2

0

プラグイン タイプのアーキテクチャに到達しようとしている場合は、http://pocoproject.org の POCO ライブラリにいくつかの要素が含まれています。これにより、実行時に .dll または .so をロードし、それに含まれるクラスを作成できます。ただし、呼び出し元のコードには、メソッドのシグネチャを取得できるようにするためのインターフェイス (または抽象基本クラス) を記述するヘッダー ファイルが必要です。

于 2012-01-23T23:21:41.630 に答える
0

C++ は非常に複雑な言語です。「リフレクティブ」API は言語設計の一部ではなかったため、基本的に存在しません。

汎用の「リフレクション」と「メタプログラミング」が必要な場合は、言語の外に出て、プログラム変換システム (PTS)を使用することでそれを得ることができます。あなたの目的のためのそのようなツールは、C ++を解析し(一度に複数のコンパイル単位で)、すべての言語構造へのアクセスを提供し、反映させる、つまり、任意の構成のタイプ(または他のプロパティ)を決定する必要があります(たとえば、変数、式、またはその他の構文構造)、任意のコード変更を適用できるようにします。明らかに、これは「実行時」には起こりません (とはいえ、あなたが主張するなら、そのような機械に飛びつくことはできると思います)。

C++ フロント エンドを備えた当社のDMS ソフトウェア リエンジニアリング ツールキットには、非常に大規模な C++ コード セットの分析と変換における実績があります。詳細な使用例については、テクニカル ペーパーを参照してください。ウィキペディア サイトの他のツールは、正しい考え方を持っていますが、C++ を処理しているとは思いません。

実際には PTS (ソースからソースへの変換なし) ではありませんが、Clangも機能する可能性があります。どのように型情報を収集し、それを使用してソース コードへの変換を実行できるかはわかりません (すべてを使用しているわけではないため)。そのような情報を使用して LLVM コード生成を行うことは明らかに非常に優れています。

于 2012-01-23T23:04:01.740 に答える