リフレクション、、
C++にはRTTIがあって、プログラムの実行中にこのRTTIから取得した情報を使って何かの処理をするという。
同様にC#ですと、メタ情報があって、例えばテキストデータからクラスのインスタンスを生成するという事が出来るらしいですが、この際にメタ情報を読んでくる、
このメタ情報を参照する事がリフレクションという事でしょうか?
(ちなみに、RTTIはメタ情報という事で合っているのか合っていないのかご指摘いただきたいです。)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
こんにちは。
基本的に関数名や変数名、変数の型などは、プログラムの実行には不要な情報です。アセンブラやC/C++などでは、実行時にはこれらの情報は原則として全て削ぎ落とされています。従って、プログラムの実行中に、関数名や変数名、変数の型を参照することは原則としてできません。
なぜなら、型情報は当該変数を操作するマシン語へ変換してしまえば、後は不要です。また関数名や変数名は遅くとも実行直前までにメモリ・アドレスへ変換されます。実行のためにはアドレスが確定していれば十分ですし、その方が高速ですので。
このようなプログラムを実行するためには不要だけどプログラムを記述する際に使う情報を「メタ情報」と呼ぶことが多いようです。
C++はRTTIの仕組みにより、このメタ情報のごく一部(型名や型の識別ID)を読み出すことができます。
(クラスのメンバ・リストやenum型のシンボル・リスト等を得ることはできません。)
この機能を「リフレクション」と呼ぶには抵抗を感じます。また、そのように表現している記述を見たことはないです。
このメタ情報を参照する事がリフレクションという事でしょうか?
参照だけに限定した機能を「リフレクション」と表現する記述は見たことはないです。
C#等のリフレクションはかなり強力で、ほとんどのメタ情報を読み出すこと、更に修正すること、当該方のインスタンスを生成することなど、大抵のことが可能です。(ただし、遅い、可読性が低い、せっかくの静的型付けがまるっと無駄になるので、リフレクションを使う必要がない時は使うべきでありません。)
(ちなみに、RTTIはメタ情報という事で合っているのか合っていないのかご指摘いただきたいです。)
RTTIはメタ情報の一部を参照できる仕組みですので、合っていると思います。
投稿2018/09/13 04:27
総合スコア23272
0
リフレクションとは何ですか?
プログラムを実行する過程において、そのプログラム自身(≒元のソースコード)の構造を参照できる機能です。
特にコンパイル型プログラミング言語の場合、コンパイル時とプログラム実行時を区別して、静的リフレクション(static reflection)、動的リフレクション(dynamic reflection)と呼ばれます。
同様にC#ですと、メタ情報があって、例えばテキストデータからクラスのインスタンスを生成するという事が出来るらしいですが、この際にメタ情報を読んでくる、
このメタ情報を参照する事がリフレクションという事でしょうか?
その理解で問題ないと思います。C#言語は、リフレクションをサポートしています。挙げられている "テキスト情報からのクラスインスタンス作成" は、動的リフレクションによって実現されます。
C++にはRTTIがあって、プログラムの実行中にこのRTTIから取得した情報を使って何かの処理をするという。
(ちなみに、RTTIはメタ情報という事で合っているのか合っていないのかご指摘いただきたいです。)
C++言語のRTTI(RunTime Type Identification)は型の「名前」を読み取れるだけです(※)。非常に限定された動的リフレクションとも解釈できますが、一般にはC++はリフレクションをサポートしない言語と言われます。
※: 厳密にはRTTIで読み取れる型名も単なるヒント情報にすぎず、実用上は「型情報の比較」ができるだけです。
投稿2018/09/13 03:02
編集2018/09/13 03:10総合スコア6191
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/13 15:41 編集
2018/09/14 02:43
2018/09/14 03:16 編集