17

C++ に構造体があるとします。

struct foobar
{
      int age; 
      bool hot;
      String name
};

プログラムで、上記の構造体を照会してそのインスタンス メンバーを抽出する方法はありますか? 例えば:

String[] members = magicClass.getInstanceMembers(foobar);

メンバー["age", "hot", "name"]の値はそのままです。

可能?私が尋ねる理由は、時間の経過とともに変化する構造体があるためです (変数の追加/削除)。この保存されたデータを使用して、自動生成される Lua ファイルを作成できるようにしたいと考えています。

ありがとう

4

3 に答える 3

14

いいえ、標準 C++ はそのタイプのリフレクションをサポートしていません。マクロを使用して、 SFINAEを使用して特定のクラスが特定のデータ メンバーまたはメンバー関数を持っているかどうかを静的に判断する型特性風のテンプレートを作成する「ハッキーな」方法がいくつかありますが、実際にすべてのメンバーを列挙する方法はありません。クラス。

実際、C++ は、C#/Java などの高レベル言語で見られるタイプのランタイム リフレクションをサポートすることを、非生産的ではないにしても困難にする特定の哲学を念頭に置いて設計されています。C++ にリフレクションがない理由を参照してください。この問題に関する徹底的な議論のために。

于 2010-11-05T21:04:10.473 に答える
1

あなたが探しているのはリフレクションと呼ばれるものだと思います。これは C / C++ で行うのは簡単ではありません: http://www.garret.ru/cppreflection/docs/reflect.html http://en.wikipedia.org/wiki/Reflection_(computer_science)

于 2010-11-05T21:06:41.193 に答える
1

本当に、本当にリフレクションを使用して「c++」コードを書きたい場合は、コードジェネレーターで何をするかを見ることがROOTできcintますmakecint。しかし、これはおそらくあなたが本当にやりたいことではありません...

于 2010-11-07T18:05:29.230 に答える