問題タブ [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++ - C ++の最も単純なRTTI実装は何ですか?
組み込みOSの例外処理を実装しようとしていますが、スローされた「例外」のタイプを検出する方法(適切なハンドラーを選択するため)に固執しています。
例外処理のコンテキスト部分の保存と復元はすでに完了していますが、スローされた「例外」のタイプを検出できないため、特定のハンドルを持つことはできません。c ++の標準RTTI実装は他のライブラリに依存しすぎているため、現在は利用できないと考えています。
私のターゲットが組み込みシステムであり、そのため多くのコードを作成できないことを考えると、取得(または作成)できる「実行時型情報」の最小の実装は何ですか?
- 編集 -
私はコンパイラに取り組んでいません、それはia32-g++です。
delphi - RTTIを使用してDelphi配列のプロパティにアクセスするにはどうすればよいですか
Delphi RTTIを使用して「単純な」プロパティ(ints / enums / stringsなど)にアクセスすることはよく知っていますが、配列プロパティの操作方法を理解できません。
GetPropValue/SetPropValue呼び出しに相当する配列を探すことから始めます。これらに似たものが表示されると思いますが、追加の「インデックス」パラメーターを使用しますが、typinfoユニットのヘルプに何も見つからないようです。
delphi - 実行時にインターフェイスの名前を取得する方法は?
インターフェイスを実装するオブジェクトがある場合、RTTI を使用してインターフェイスを検索し、その GUID を取得することはそれほど難しくありません。しかし、その名前が必要な場合、それを取得する方法はありますか? クラスの名前を取得するのは簡単ですが、インターフェイスの場合は少しトリッキーに思えます...
visual-studio - rtti が無効なアプリケーション内で rtti が有効な DLL をリンクすることはできますか?
プロジェクトのプロパティでランタイム型情報を有効にして DLL をビルドするソリューションがあります。これは、Visual Studio 2005 のデフォルト (/GR) です。私たちのライブラリにはかなりの数の dynamic_casts があるため、現在、実行時の型情報なしで DLL をビルドすることはできません。
現在、私の顧客は Dassault Systèmes の開発ツールを使用していますが、Run-Time Type Information を使用できないと記載されています。常に無効 (/GR-) です。
問題は、これが問題かどうかです。
この状況を、動的キャストを行う少しのコードで DLL を作成する小さな例で試しました。DLL は、RTTI を有効にしてビルドされています。小さなアプリケーションは DLL を使用し、特に dynamic_casts を含むコードを使用します。このアプリケーションは、RTTI を無効にしてビルドされています。それは正常に動作します。しかし、予測不可能な動作では、何が起こる可能性があります...
RTTI を使用している DLL と RTTI を使用していない DLL を混在させても問題ないことを顧客に伝えたいのですが、詳細な情報を見つけることができませんでした (Google、MSDN などを使用)。誰もこの問題の答えを知っていますか?
delphi - Delphi アプリケーション構成をシリアル化する最良の方法は何ですか?
私はこの質問に自分で答えますが、あなたが私より速い場合、または私の解決策が気に入らない場合は、遠慮なく答えてください。私はちょうどこのアイデアを思いついたので、それについていくつか意見を述べたいと思います。
目標: (INI ファイルのように) 読み取り可能であるが、load および save メソッドを記述する (そして新しい構成項目が追加された後に適応する) 必要がない構成クラス。
のようなクラスを作りたい
TMyConfiguration.Save (TConfiguration から継承) を呼び出すと、次のようなファイルが作成されます。
質問:これを行う最善の方法は何ですか?
delphi - 任意のタイプでGetEnumeratorを呼び出す方法は?
データのリストを表示できるはずのコントロールを書いています。私がやりたかったのは、CurrentプロパティとMoveNextメソッドを含むパブリックGetEnumerator関数をチェックするという点で、for-in構造を模倣することでした。
私は次のことを決定しました:
- オブジェクトでMethodAddressを呼び出すだけで、メソッドの存在を確認できます。アドレスを取得すると、メソッドが存在します。
- RTTIを使用して、メソッドの戻り型を確認できます。
- RTTIを使用して、プロパティを確認し、読み取ることができます。
しかし、その間に、私は少しの情報が欠けています:
- アドレスを指定してメソッドを呼び出すにはどうすればよいですか?(インポートの場合と同じように)定義を記述し、アドレスをキャストして呼び出すだけですか?
- メソッドの戻り型を確認するには、PTypeInfoを使用してGetTypeDataを呼び出す必要があります。タイプでTypeInfoを呼び出すことにより、PTypeInfoを取得します。では、アドレスのみを指定して、特定のメソッドのPTypeInfoを取得するにはどうすればよいですか?
c++ - オブジェクトが C++ でメソッドを実行できるかどうかを実行時に判断する方法はありますか?
Perl には UNIVERSAL::can メソッドがあり、任意のクラスまたはオブジェクトに対して呼び出して、何かを実行できるかどうかを判断できます。
C++ に、さまざまな派生クラスのいずれかになる基本クラス ポインターがあるとします。これに似たものを簡単に実現する方法はありますか? 他の派生クラスでは何も変更する必要はありません。関数を呼び出す基本クラスと、それをサポートする 1 つの派生クラスの領域のみを変更できます。
編集:待ってください、これは明らかです(質問は気にしないでください)。UNIMPLEMENTEDを表す数値を返すベースに実装し、呼び出したときに戻り値がこれではないことを確認できます。なんでこんなに複雑に物事を考えていたのかわからない。
また、実装された別のクラスからクラスを派生foo
させ、このクラスへの動的キャストが機能するかどうかを確認することも考えていました。
c++ - 継承階層をトラバースするための静的キャストと動的キャスト
静的キャストを使用して継承階層をナビゲートする方が動的キャストを使用するよりも効率的であると述べているC++に関する1冊の本を見ました。
例:
ただし、動的キャストと静的キャスト(上記で実装)の両方で、このようなナビゲーションを機能させるにはRTTIを有効にする必要があります。動的キャストでは、クラス階層が多態的である必要があります(つまり、少なくとも1つの仮想関数を持つ基本クラス)。
静的キャストのこの効率の向上はどこから来るのですか?この本は、動的キャストがタイプセーフなダウンキャストを行うための好ましい方法であると述べています。
delphi - Rtti.TValue型の変数にインターフェイス変数を割り当てるにはどうすればよいですか?
現時点では、delphi2010を試してみて、RttiユニットのTValueタイプを見つけました。TValueには非常に興味深い機能がありますが、インターフェイスを割り当てる方法が見つかりません。
私は次のことを試みます
これ以上の情報は見つかりません。デルファイヘルプシステムにもインターネットにもありません。私は何を間違えますか?
delphi - RTTI 情報に基づく Delphi 呼び出しメソッド
こんにちは、まず私の下手な英語で申し訳ありません。以下を考慮してください (実際のコードではありません)。
RTTI を使用して「MyOtherClass」プロパティを設定しています。文字列プロパティの場合は簡単ですが、私の質問は次のとおりです。
メソッドを呼び出すことができるように、「データ」(MyClass) プロパティへの参照を取得するにはどうすればよいGo()
ですか?
私はこのようなことをしたい(疑似コード):
(これがC#だったら:()
PS .: これは Delphi 7 にあります (さらに悪いことはわかっています)。