- ベストアンサー
c++ 包含しているメンバーのリスト
包含しているメンバーのリストを取得するにはどうすれば良いでしょうか? 例えば、クラスAが long型の変数x、yと、 char型の変数zを持っているとき、 それらの「型」及び「変数名」を配列で返すような方法などがあるのかなと思っています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
C++と言ってもいろんな処理系がありますので必ずしも使えるとは限りませんが、 auto型、テンプレートを駆使すれば型はわかるかもしれません。 (C++11での機能ですので、サポートしている処理系かは確認してください。) でもメンバを知りたい目的は何なのでしょうか? 普通クラス定義をみればメンバの名前と型はわかりますが、 それが見えないクラスについて型を知りたいということなのでしょうか?
その他の回答 (3)
- HDraco
- ベストアンサー率100% (3/3)
C#なら http://www.atmarkit.co.jp/fdotnet/dotnettips/224controls/controls.html みたいなのが参考になりますね。 (個人的にWindows上では最近はC#、C++はLinux上で使ってますので^^;)
お礼
実は、 C#なら、 foreach (Control c in top.Controls)でできて、 VB.NETなら、 For Each c As Control In top.Controlsでできるのですが、 C++だとどうやるのでしょうか?
- rinkun
- ベストアンサー率44% (706/1571)
それらの情報を実行中のプログラムから使うことを考えているなら、C++にはそのような機能はないと思ってください。 実行時型情報を扱う機能はC++には仮想関数などごく一部しかありません。 そのような機能が必要な場合は別の言語を使うことをお勧めします。
お礼
C++にはないのですか。。 残念。 実行時に扱う機能、 そのわずかな仮想関数は少し調べてみようと思います。 ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
「何から」取得するのか, によって大きく変わる. ソースコードから取得するなら, 本質的にはコンパイラを作ればいいだけ. そうでないなら一般には不可. 「デバッグ情報」があれば, そこから拾ってくることも考えられなくはないが当然「デバッグ情報」に強く依存する.
お礼
コンパイラを作成は 難易度が高そうなので私にはできなさそうです。 デバッグ情報からは拾えるのですね (確かにデバッガで、各変数の方がわかりますものね。) しかしリリースする実行体には、デバッグ情報は除外するので、その意味でも難しいてす。 あきらめます。 ありがとうございました!
お礼
ありがとうございます。 画面上に存在するクラスを総舐めして、 それらのクラスのうち、 TextBox系やListBox系など、 一部のユーザコントロールに対して一定の処理を施すということをしようとしていました。 (View層は他のミドルウェア)