問題タブ [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.
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
このようなものが に適用されて、それがどのように公平になるかを確認したいと思います。
delphi - TValueを使用して文字列を列挙型に変換しますか?
TValueを使用して文字列を列挙型に変換したいのですが、グーグルで検索しましたが、その方法が見つかりませんでした。
動作しません。それは私が見ていなかった愚かなことであるに違いありません-しかし私はそれを見つけませんでした。何を間違えたの?
GetEnumValueの使用方法を知っています。
編集:@ウォーレン、これはコードを投稿するのが簡単なので、ここに行きます:
使用法:
delphi - Delphi-レコード内のメソッドに関するRTTI情報
Delphiレコードのメソッドに関するRTTI情報を抽出する方法は?新しいRttiユニットを使用して可能ですか?
delphi - Delphi:2010年のインデックス付きプロパティのRTTI?
次のコード例の冗長性はご容赦ください。Delphi 2009を使用して、TOtherClassとTMyClassの2つのクラスを作成しました。
アクセス指定子は次のように実装されます
その使用法は次のように説明できます。
この「設計」の明らかな欠陥を気にしないでください。RTTIを介してプロパティIndxPropにアクセスできるようにしたいと思い、その後IndxPropを公開されたセクションに移動しました。残念なことに、公開されたセクションではインデックス付きのプロパティが許可されていないことがわかりました。私が理解している限り(RTTIを使用してDelphi配列プロパティにアクセスする方法に関するBarry Kellysのコメントを参照)、D2010に移行してもこれを行うことはできません。
一方、Robert Lovesブログからの引用は次のとおりです。「...プロパティとメソッドは、公開セクションと公開セクションの両方でRTTIを介して利用できるようになり、フィールドはすべてのセクションで利用できるようになりました。」(私のイタリック体。)
私の質問はこれです:D2010でパブリックフィールドのRTTIを取得することが可能である場合、私の元の例(上記のように)はD2010(RTTIを使用)で機能するべきではありませんか?前もって感謝します!
delphi - Delphi 2010:TRTTIConstructorに何が起こったのですか?
2つの質問があります(そのうちの少なくとも1つはD2010のRTTIと動的インスタンス化に関するものです)
- 私はバリー・ケリーによる会議の話の箔のように見えるものを読んでいて、p。13本当に面白そうなもの:
TRTTIConstructor.Invoke
。隣接する箇条書きでは、「仮想コンストラクターとメタクラスを必要とせずにインスタンスを動的に構築する」ことがわかります。これは素晴らしい機能のようです(そしてまさに私が必要としているものです)!ただし、D2010ドキュメント(ms-help://embarcadero.rs2010/vcl/Rtti.html)を見ると、見つかりません。取り消されましたか? - クラス名が文字列に格納されている場合、クラスのインスタンスを作成する最小限の方法は何ですか?
java - JavaでのRTTIの回避
私がスーパークラスを持っている場合、動物と言います、
そして2つのサブクラス:ゼブラとキリン、
動物のベクトルを定義することにした場合:
そして私が言いたいのは:キリンを追加することはできますが、最初に少なくとも1つのゼブラを所有している必要があります。
RTTIを使用せずにこれを行うための最良の方法は何ですか?(instanceof)
delphi - Delphi:DynArraySetLengthを使用してRTTIアクセスの動的配列の長さを設定する方法は?
この投稿で提案されているように、動的配列の長さを設定したいと思います。2つのクラスTMyClassと関連するTChildClassが次のように定義されています
アレイ拡張は次のように実装されます
D2010 RTTIを初めて使用するため、エラーはクラスインスタンスからのArrValueの取得に依存する可能性があると思われましたが、その後WriteLn
は「TRUE」と出力されるため、除外しました。ただし、残念ながら、同じWriteLn
レポートでArrValueのサイズが0であることが報告されています。これは、「範囲外のインデックス」によって確認されます。これは、配列内の要素のいずれかを設定しようとしたときに発生する例外です(からArrValue.SetArrayElement(i, Value);
)。私がここで間違っていることを誰かが知っていますか?(または、これを行うためのより良い方法があるかもしれませんか?)TIA!
dll - C++ DLL インジェクションは構造体の値を取得します
パラメータの 1 つに void ** を送信する dll に注入しようとしています。
void ** には、アプリケーションで作成された構造体を含めることができます。
構造体からデータを取得する方法はありますか。
delphi - Delphi: RTTI と TObjectList
以前の投稿への 1 つの回答に基づいて、次の設計の可能性を調査しています。
さて、現実の世界では、TMyClass にはこのような 10 個の異なるリストがあるため、RTTI を使用してこれらのリストに対処できるようにしたいと考えています。ただし、このクラスの他のフィールドには興味がないので、特定のフィールドがある種の TObjectList であるかどうかを確認する必要があります。これは私がこれまでに得たものです:
明らかに、RField.FieldType <> RObjListType.FieldType
. しかし、彼らには何らかの関係がありますね。実際RField.FieldType
にTObjectList
.
正直なところ、私はジェネリックにはかなり慣れていないので、質問は非常にナイーブかもしれません. しかし、私は学ぶことが何よりもうれしいです。上記の解決策を実装することは可能ですか? ティア!
c++ - リフレクションに Visual Studio .ncb ファイルを使用する
C++ でビジュアル ゲーム レベル エディターを開発しています。このために、リフレクション(RTTI)メカニズムが実行時にクラス属性を認識できるようにします。現在、これには PDB ファイルを使用していますが、PDB を使用すると、その属性に指定されたコメント形式の追加情報について、実際のコード行を取得できませんでした。Visual Studio は、インテリジェンスのために NCB ファイルを使用します。では、PDB の代わりに NCB を使用する方が良いでしょうか? はいの場合、NCB ファイルから情報を取得する方法は? DIA SDK のような SDK はありますか?