問題タブ [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 投票する
1 に答える
3337 参照

json - Delphiスーパーオブジェクト、jsonのジェネリックリスト

SuperObjectのヘルプを使用してJSONとしてエンコードしようとするTObjectList<>フィールドを持つオブジェクトがあります。

SuperObjectsコードの奥深くに、ToClassプロシージャがあり、フィールドを繰り返してjsonの結果に追加します。

このループでは、TRttiFieldsFieldTypeがチェックされます。nilの場合、オブジェクトをスキップします。

私のジェネリックリストフィールドのFieldTypeはnilです。なんで?

SuperObjectにオブジェクトのリストをシリアル化するにはどうすればよいですか?

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

delphi - 文字列から PTypeInfo を取得できますか?

これはおそらく「いいえ」になるでしょうが、Delphi の RTTI、古い学校または 2010 拡張 RTTI を使用して、型の名前、具体的には列挙型の名前を含む文字列を渡す方法はありますか?その型の PTypeInfo を教えてくれますか? RTTI.pas と TypInfo.pas を調べましたが、それを行う関数は見当たりませんが、何かを見落としている可能性があります。

私が探しているもの:

またはそのようなもの。つまり、列挙型の名前が渡されます。コンパイル時にはわかりません。

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

c++ - 優れた C++ リフレクション API について知る必要がある (RuntimeType Identification -RTTI およびランタイム呼び出し用)

実行時に識別される型 (class、struct、enum、int、float、double など) を判別し、それらを宣言し、実行時にそれらの型のメソッドを呼び出すことができる、優れた C++ リフレクション API (Microsoft API など) が必要です。 .

よろしく、

ウスマン

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

c++ - 現在の「this」オブジェクト型を検出することによる C++ での型キャスト

私の質問は、オブジェクトが別のオブジェクトの型階層に属しているかどうかを確認しようとしている C++ の RTTI に関連しています。BelongsTo() メソッドはこれをチェックします。typeid を使用してみましたが、エラーがスローされ、実行時に変換するターゲット型を見つける方法が他にわかりません。

同じ型階層に多くのクラスがあるため、メソッドを仮想化して派生クラスに任せるのは悪い考えのようです。または、同じことを行うための他の/より良い方法を知っている人はいますか? 提案してください。

更新: b.BelongsTo(a) は、入力オブジェクト型 (a) が型階層内の現在のオブジェクト (b) の祖先であるかどうかを検出する必要があります。

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

c++ - Mac OS XでRTTIを使用するライブラリと使用しないライブラリをGCCと混合しますか?

私は問題に頭を悩ませてきました、そして私がもう少し自分自身を傷つけ続ける前に、私は確認したいと思います:

RTTIの有無にかかわらずコンパイルされたライブラリを使用するGCCプロジェクトを持つことは可能ですか?

したがって、たとえば、ライブラリB(RTTIを使用してコンパイル)とライブラリC(RTTIを使用せずにコンパイル)を使用するプロジェクトA(RTTIなしでコンパイル)があります。理論的には、すべてが問題なくコンパイルおよびリンクされることになっていますか?

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

delphi - Delphi RTTI でインターフェイスが見つかりません

D2010 RTTI を使用してインターフェイスを取得しようとしています。

IMyPrettyLittleInterfaceとの両方TMyIntfClass = class(TInterfacedObject, IMyPrettyLittleInterface)が で宣言されていますmynamespace.pas。特に

これが機能しない理由を誰か知っていますか?私の問題を解決する方法はありますか?前もって感謝します!

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

delphi - Delphi TRttiType.GetMethods はゼロの TRttiMethod インスタンスを返します

私は最近、TRttiContext.FindType を使用してインターフェイスの TRttiType を取得できるようになりました。Robert Loves の「GetType」回避策(ctx.GetType への明示的な呼び出しによるインターフェイスの「登録」、たとえば RType := ctx.GetType(TypeInfo( IMyPrettyLittleInterface));)。

論理的な次のステップの 1 つは、上記のインターフェイスのメソッドを反復することです。検討

今回mynamespace.pasはこんな感じです。

残念ながら、RType.GetMethods長さゼロの TArray インスタンスを返します。私のトラブルを再現できる人はいますか?(私の例では、回避策ではなく、TRttiContext.GetType を使用して TRttiType を明示的にフェッチしたことに注意してください。この紹介は、rtti とインターフェイスに関して未解決の問題がある可能性があることを読者に警告するために含まれています。) ありがとう!

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

delphi - TValue を使用した Delphi インターフェイス キャスト

私は最近、インターフェイスと D2010 RTTI を広範囲に実験しました。実行時にインターフェイスの実際の型がわかりません。文字列を使用して修飾名にアクセスできますが。

次の点を考慮してください。

の内容mynamespace.pasは次のとおりです。

完全を期すために、実装は次のようになります

の理由は、この投稿{$define WORKAROUND}で見つけることができます。

質問: RTTI を使用して目的の型をキャストする方法はありますか? つまり、1) 文字列としての IChild の修飾名、および 2) IParent インターフェイスとしての TChild インスタンスへの参照を知ることから IChild.ChildMethod を呼び出す方法はありますか? (結局のところ、ハードコードされたキャストは問題なく動作します。これは可能なのでしょうか?) ありがとうございます!

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

c++ - RUNTIME_CLASS() マクロによって返されたポインタを比較してもよろしいですか?

CRuntimeClassビューを設定するためにポインターのリストを受け取る関数があります。すでにセットアップされている同じクラスのリストで関数が呼び出された場合、何もせずに戻りたいと思います。ポインター値を保存して次の呼び出しでそれらを比較することは現在機能していますが、それが合法的なことであり、たまたま機能することではないことを確認したいと思います。私の doc-search-fu が欠けているのかもしれませんが、特定のクラスの RUNTIME_CLASS() マクロから返されるポインター値がプログラムの存続期間中同じであることを保証する場所が見つかりません。私が見つけることができる最も近いものは、次のドキュメントにCObject::GetRuntimeClass()あります。

CObject 派生クラスごとに 1 つの CRuntimeClass 構造体があります。

これは、ポインターの値が変更されるべきではないことを意味しますが、正確に述べているわけではありません。誰かがそれについてもう少し具体的なことを持っていますか? または、CRuntimeClasses を比較するより良い方法はありますか?

0 投票する
10 に答える
695 参照

c++ - C++ では、最も派生したクラスへのポインターを要求できないのはなぜですか?

(この質問は、おそらく Stroustrup を参照して回答する必要があります。)

次のように、最も派生したクラスへのポインターを要求できると非常に便利です。

ただし、このメカニズムは c++ では提供されていません。なんで?

更新、動機付けの例:

Base と Derived と Processor の代わりに、次のものがあるとします。

しかし、これを C++ で行うのは難しく、ビジター パターンのような独創的なソリューションが必要です。問題は、「CAST_TO_MOST_DERIVED」のようなものを使用するとはるかに簡単になるのに、C++ でこれを行うのが難しいのはなぜですか?

更新: ウィキペディアはすべてを知っている

ポンタス・ガッジは良い答えを持っていると思います。ウィキペディアのMultiple Dispatchのエントリから、次のビットを追加します。

「Stroustrup は、The Design and Evolution of C++のマルチメソッドの概念が好きで、C++ での実装を検討したと述べていますが、(仮想関数に匹敵する) 効率的なサンプル実装を見つけることができず、型のあいまいさの問題を解決できなかったと主張しています。 . 彼は続けて、この機能はまだあればいいのですが、上記の C/C++ の例で概説したように、ダブル ディスパッチまたは型ベースのルックアップ テーブルを使用してほぼ実装できるため、将来の言語では優先度の低い機能であると述べています。リビジョン。」

背景については、 Multi-Methodsについての簡単な要約を読むことができます。これは、私が言及したような呼び出しよりも優れているでしょう。