2012-01-17 21 views
2

C/C++のデータ構造(ネストされた構造体、ポインタの配列、その他のさまざまな基本データ型)に一般的な方法でアクセスするためのリフレクションフレームワークはありますか?C++でのCデータ構造への一般的なアクセスは、何らかの形で反映されますか?

そうでない場合は、これに最も効果的なヒントがありますか?

数十から数百の異なる構造を持つa large MS Windows C APIのテストソフトウェアを書いています。その中には、いくつかのレベルまでの構造体へのポインタのネストされた配列が含まれています。

テストの場合、文字列として与えられたテストの記述に従って、データ構造に値を設定し、後でチェックする必要があります。現在、これはむしろフラットで退屈な(一貫性がなく、エラーを起こしやすい)方法でプログラムされています。私はこれを変更したいと思います。

私はいくつかの種類のパスを介してデータ構造の値に一般的にアクセスできるようにするために使用されるすべてのデータ型構造のテンプレートを考えています。

私はこれを完全に自動化する必要はありません。構造体の特定のフィールドごとにいくつかの作業(たとえば、1行または2行のコード)を行うことは問題ありません。

+0

あなたが意味することは本当に明確ではありません。 Cデータ構造体のメンバにアクセスする一般的な方法は、ドットまたは矢印演算子を使用する方法です。 ( 'fooStruct.someMember')' getMember(typeof(FooStruct)、someMember ")'のようなリフレクションが欲しいということですか? – jalf

+0

"テストの説明"の例を挙げることができますか? –

+0

はい、反射すると、タグが更新されました。私は、必要な構造単位の作業のいくつかを行う準備もしています。 – starblue

答えて

1

C/C++ではサポートされていないreflectionという機能について説明しています。

これをC++で行う方法は、ソースファイルを解析して、必要な操作を実行するためのソースコードをさらに生成することです。各クラスの検索、ネストされたクラスの検索、各メンバー関数の検索などを行います。

C++パーサーの作成は難しいですが、既存の無料の実装が多数あります。

+0

私は、アクセスを行い、解析を介して特定のデータ構造のために設定することは別の問題だと思います。今のところ私は、解析の正当性を証明することはできないと考えています。 – starblue

+0

リフレクション可能なランタイムのある言語では、正しいと思われます。なぜなら、パースの優れた代替手段があるからです。しかし、CやC++では、間違っていると思います。ソースコードを自分で調べない限り、実行時に型の「形」を発見する方法はありません。言語内では、 'sizeof'演算子を使って静的な大きさの時間を発見することができます。この演算子は、静的に宣言された長さがあると仮定して配列の長さを発見するのに役立ちます。 –

+0

アクセスすることを知ったら、「アクセスを行う」は簡単です。実際の問題は何にアクセスするかを知ることです。 –

関連する問題