問題タブ [rtti]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
626 参照

c++ - std::type_info のリフレクション拡張についての一般的な感覚は?

リフレクションは、他の言語の開発者が c++ に非常に欠けていると感じる機能の 1 つです。特定のアプリケーションについては、その理由がよくわかります。リフレクションがあれば、IDE のオートコンプリートのようなものを書くのはとても簡単です。確かに、シリアライゼーション API があれば、もっと簡単になるでしょう。

一方、C++ の主な信条の 1 つは、使用しないものにはお金を払わないことです。これは完全に理にかなっています。それが私が c++ で気に入っていることです。

しかし、妥協点があるかもしれないと思いました。std::type_infoコンパイラが構造に拡張機能を追加しないのはなぜですか? 実行時のオーバーヘッドはありません。バイナリは最終的に大きくなる可能性がありますが、これは有効/無効にする単純なコンパイラ スイッチである可能性があり、正直なところ、スペースの節約が本当に心配な場合は、とにかく例外と RTTI を無効にする可能性があります。

テンプレートの問題を指摘する人もいますが、コンパイラはstd::type_infoすでにテンプレート型の構造を喜んで生成しています。

-fenable-typeinfo-reflection非常に普及する可能性のある g++ スイッチのようなものを想像できます(そして、boost/Qt/etc のような主流のライブラリは、それを使用するコードを生成するためのチェックを簡単に行うことができます。スイッチ)。このような大規模なポータブル ライブラリは既にコンパイラの拡張機能に依存しているため、これが不合理だとは思いません。

では、なぜこれがより一般的ではないのでしょうか。何かが足りないと思いますが、これに関する技術的な問題は何ですか?

編集:いくつかのメトリックが肥大化の引数を再定義します:

私はかなり大きな Qt プロジェクト (約 45,000 LoC) を見て、メタオブジェクトのサイズを測定しました。Qt moc システムはかなり網羅的なリフレクション システム (型、関数、列挙、メンバー、および "プロパティ" などのいくつかの Qt 固有の概念) であるため、これは妥当なメトリックだと思います。合計 67 個のメタオブジェクトがあったため、些細な量ではありませんが、おかしなことではなく、合計で5479 バイトになりました。ただし、それらのほとんどは 32 バイト以下 (最大は 1427 バイト) でした。最新のコンパイラは、最も単純なプログラムでも 4K 以上のバイナリを生成することを考えると、これらの数値は法外ではありません)。STLこのようなものが に適用されて、それがどのように公平になるかを確認したいと思います。

0 投票する
4 に答える
9942 参照

delphi - TValueを使用して文字列を列挙型に変換しますか?

TValueを使用して文字列を列挙型に変換したいのですが、グーグルで検索しましたが、その方法が見つかりませんでした。

動作しません。それは私が見ていなかった愚かなことであるに違いありません-しかし私はそれを見つけませんでした。何を間違えたの?

GetEnumValueの使用方法を知っています。

編集:@ウォーレン、これはコードを投稿するのが簡単なので、ここに行きます:

使用法:

0 投票する
1 に答える
1037 参照

delphi - Delphi-レコード内のメソッドに関するRTTI情報

Delphiレコードのメソッドに関するRTTI情報を抽出する方法は?新しいRttiユニットを使用して可能ですか?

0 投票する
1 に答える
1565 参照

delphi - Delphi:2010年のインデックス付きプロパティのRTTI?

次のコード例の冗長性はご容赦ください。Delphi 2009を使用して、TOtherClassとTMyClassの2つのクラスを作成しました。

アクセス指定子は次のように実装されます

その使用法は次のように説明できます。

この「設計」の明らかな欠陥を気にしないでください。RTTIを介してプロパティIndxPropにアクセスできるようにしたいと思い、その後IndxPropを公開されたセクションに移動しました。残念なことに、公開されたセクションではインデックス付きのプロパティが許可されていないことがわかりました。私が理解している限り(RTTIを使用してDelphi配列プロパティにアクセスする方法に関するBarry Kellysのコメントを参照)、D2010に移行してもこれを行うことはできません。

一方、Robert Lovesブログからの引用は次のとおりです。「...プロパティとメソッドは、公開セクションと公開セクションの両方でRTTIを介して利用できるようになり、フィールドはすべてのセクションで利用できるようになりました。」(私のイタリック体。)

私の質問はこれです:D2010でパブリックフィールドのRTTIを取得することが可能である場合、私の元の例(上記のように)はD2010(RTTIを使用)で機能するべきではありませんか?前もって感謝します!

0 投票する
2 に答える
1093 参照

delphi - Delphi 2010:TRTTIConstructorに何が起こったのですか?

2つの質問があります(そのうちの少なくとも1つはD2010のRTTIと動的インスタンス化に関するものです)

  1. 私はバリー・ケリーによる会議の話の箔のように見えるものを読んでいて、p。13本当に面白そうなもの:TRTTIConstructor.Invoke。隣接する箇条書きでは、「仮想コンストラクターとメタクラスを必要とせずにインスタンスを動的に構築する」ことがわかります。これは素晴らしい機能のようです(そしてまさに私が必要としているものです)!ただし、D2010ドキュメント(ms-help://embarcadero.rs2010/vcl/Rtti.html)を見ると、見つかりません。取り消されましたか?
  2. クラス名が文字列に格納されている場合、クラスのインスタンスを作成する最小限の方法は何ですか?
0 投票する
1 に答える
786 参照

java - JavaでのRTTIの回避

私がスーパークラスを持っている場合、動物と言います、

そして2つのサブクラス:ゼブラキリン

動物のベクトルを定義することにした場合:

そして私が言いたいのは:キリンを追加することはできますが、最初に少なくとも1つのゼブラを所有している必要があります。

RTTIを使用せずにこれを行うための最良の方法は何ですか?(instanceof

0 投票する
2 に答える
3269 参照

delphi - Delphi:DynArraySetLengthを使用してRTTIアクセスの動的配列の長さを設定する方法は?

この投稿で提案されているように、動的配列の長さを設定したいと思います。2つのクラスTMyClassと関連するTChildClassが次のように定義されています

アレイ拡張は次のように実装されます

D2010 RTTIを初めて使用するため、エラーはクラスインスタンスからのArrValueの取得に依存する可能性があると思われましたが、その後WriteLnは「TRUE」と出力されるため、除外しました。ただし、残念ながら、同じWriteLnレポートでArrValueのサイズが0であることが報告されています。これは、「範囲外のインデックス」によって確認されます。これは、配列内の要素のいずれかを設定しようとしたときに発生する例外です(からArrValue.SetArrayElement(i, Value);)。私がここで間違っていることを誰かが知っていますか?(または、これを行うためのより良い方法があるかもしれませんか?)TIA!

0 投票する
1 に答える
382 参照

dll - C++ DLL インジェクションは構造体の値を取得します

パラメータの 1 つに void ** を送信する dll に注入しようとしています。

void ** には、アプリケーションで作成された構造体を含めることができます。

構造体からデータを取得する方法はありますか。

0 投票する
2 に答える
3619 参照

delphi - Delphi: RTTI と TObjectList

以前の投稿への 1 つの回答に基づいて、次の設計の可能性を調査しています。

さて、現実の世界では、TMyClass にはこのような 10 個の異なるリストがあるため、RTTI を使用してこれらのリストに対処できるようにしたいと考えています。ただし、このクラスの他のフィールドには興味がないので、特定のフィールドがある種の TObjectList であるかどうかを確認する必要があります。これは私がこれまでに得たものです:

明らかに、RField.FieldType <> RObjListType.FieldType. しかし、彼らには何らかの関係がありますね。実際RField.FieldTypeTObjectList.

正直なところ、私はジェネリックにはかなり慣れていないので、質問は非常にナイーブかもしれません. しかし、私は学ぶことが何よりもうれしいです。上記の解決策を実装することは可能ですか? ティア!

0 投票する
2 に答える
338 参照

c++ - リフレクションに Visual Studio .ncb ファイルを使用する

C++ でビジュアル ゲーム レベル エディターを開発しています。このために、リフレクション(RTTI)メカニズムが実行時にクラス属性を認識できるようにします。現在、これには PDB ファイルを使用していますが、PDB を使用すると、その属性に指定されたコメント形式の追加情報について、実際のコード行を取得できませんでした。Visual Studio は、インテリジェンスのために NCB ファイルを使用します。では、PDB の代わりに NCB を使用する方が良いでしょうか? はいの場合、NCB ファイルから情報を取得する方法は? DIA SDK のような SDK はありますか?