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

delphi - Delphi: メソッド名が実行可能ファイルに表示されないようにする

実行可能ファイルのセキュリティを処理するクラスを作成しています (シリアルのチェック、試用日のチェックなど)。実行可能ファイルをコンパイルした後 (リリース ビルドでも、すべてのデバッグと RTTI 生成をオフにして)、メモ帳で開いて生データでメソッド名を検索すると、クラスをアセンブルするメソッドの名前がす​​べて表示されます。 . コード ベースのどのクラスにも、公開されたメンバーはありません。

これは保護に悪いです。メソッド名を実行可能ファイルに保存しないように Delphi に指示する方法はありますか? RTTI が必要なく、COM 爆発もないのに、なぜそれらを保存するのですか? これを制御するコンパイラ オプションはありますか?

ターゲット実行可能ファイル内の ANY クラスの ANY メソッドが、実行可能ファイル内にテキスト形式で格納されている可能性があります。これは、Delphi 2010 のすべてのクラスで拡張 RTTI がデフォルトでオンになっていることが原因のようです。

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

delphi - rttiを使用してバリアントフィールドにNULLを設定する方法

rttiを使用してバリアントフィールドにnullを設定する際に問題が発生しました。

次のようなクラスがあるとします。

Field1にアクセスすると、次のことができます。

しかし、Field2ではこれを行うことができないようです。

また

したがって、私が欲しいのは、上記のクラスのField2にnull値を設定できるようにすることです。出来ますか?任意のアイデアをいただければ幸いです。

ゴラン

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

delphi - 特定のインターフェイスを実装するすべてのDelphiクラスを列挙しますか?

Delphi 2010の新しい拡張RTTIを使用すると、Delphiアプリケーションは(実行時に)特定のインターフェイスを実装するすべてのクラスのリストを作成できますか?

0 投票する
7 に答える
8990 参照

delphi - Delphi で RTTI を気にする必要があるのはなぜですか?

Delphi 2010の新しい/改善された RTTI 機能についてはよく耳にしますが、私の無知を認めなければなりません...理解できません。Delphi のすべてのバージョンが RTTI をサポートしていることは知っています...そして、RTTI (Runtime Type Information) を使用すると、アプリケーションの実行中に型情報にアクセスできることも知っています。

しかし、それは正確にはどういう意味ですか? Delphi 2010 の RTTI サポートは、.NETのリフレクションと同じものですか?

RTTI が便利な理由を誰か説明してもらえますか? 私がとんがった髪の上司のふりをして、RTTI がクールな理由を理解するのを手伝ってください。実際のアプリケーションでどのように使用できますか?

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

c++ - クラスからサブクラスへの動的キャストでクラスがポリモーフィックである必要があるのはなぜですか?

私が理解しているように、動的キャストが静的キャストと異なるのは、RTTI の使用と、変数の動的型 (ベースから派生型へのキャスト時) が適合しない場合に失敗するという事実です。しかし、とにかく RTTI があるのに、なぜそれを行うためにクラスをポリモーフィックにする必要があるのでしょうか?

編集:「ポリモーフィック」という言葉の使用について混乱があったため、cplusplus.com のエントリを次に示します。

dynamic_cast は、オブジェクトへのポインターと参照でのみ使用できます。その目的は、型変換の結果が要求されたクラスの有効な完全なオブジェクトであることを確認することです。

したがって、クラスをそのベースの 1 つにキャストすると、dynamic_cast は常に成功します。

基本クラスがポリモーフィックでない限り、基本クラスから派生クラスへの変換は dynamic_cast では許可されないため、このコードの 2 番目の変換ではコンパイル エラーが発生します。

http://www.cplusplus.com/doc/tutorial/typecasting/

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

c++ - RTTI を使用して親オブジェクトのコレクション (ベクトル) からオブジェクト タイプを取得する方法

そこから派生した 2 つの子クラスを持つ基本クラスがあります。

次のようなベクトルを使用して、クラス A メンバーのコレクションへのポインターを持つ別のクラスがあります。

クラス B または C のオブジェクトを作成し、push_back を使用してコレクションに追加します。

次に、コレクションをループして「typeid」を使用してチェックしようとしますが、常に基本クラス (A) が返されます。正確なタイプを知ることはできませんか?

ありがとうございました!

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

delphi - RTTIを使用して実行時にDelphiのすべてのクラスヘルパーを見つけますか?

Delphi 2010 の拡張 RTTI は、実行時に定義済みのクラスおよびレコード ヘルパーをリストする方法を提供しますか?

私の知る限り、クラスに対して複数のクラス ヘルパーが定義されている場合、Delphiはヒントや警告を表示しません。クラス ヘルパーの検出は、「品質保証」に役立つルーチンになる可能性があります。

ps もちろん、サードパーティのコンポーネントやライブラリをソース コードなしで使用してはならないことはわかっています。これにより、クラス ヘルパーの grep が容易になります。

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

c++ - RTTI を使用しない型の等価性のテスト

BCは から派生していますA。RTTI を使用せずに、から派生したクラスの 2 つのインスタンスAが同じクラスのインスタンスであるかどうか、つまりA* fooA* bar両方がインスタンスを指しているかどうかをテストできるようにしたいと考えています。B私の現在の解決策は次のようなものです:

このメソッドを使用すると、operator==簡単にテストできますfirst.code() == second.code()。すべての派生クラスがこのイディオムを繰り返す必要がないようにidentity、派生クラスからリテラルを削除し、コードが によって自動的に検出されるようにしたいと考えています。A繰り返しますが、私は RTTI を使用しないことを強く望んでいます。これを行う方法はありますか?

注:最近の質問[1][2]を見ましたが、これは重複していません。これらの投稿者は、派生クラスの内容をテストしたいと考えています。私は単に身元をテストしたいだけです。

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

delphi - TValue.AsTypeの使用方法ちゃんと?

RTTIを使用して、イベントハンドラーが既に設定されている可能性のあるコントロールにイベントハンドラーを追加しようとしています。コードは次のようになります。

MyOnChangeでこれを実行できるように、これが必要です。

残念ながら、コンパイラはこの行を気に入らないようですFOldOnChange := val.AsType<TNotifyEvent>;。それは言う

E2010互換性のないタイプ:'プロシージャ、型指定されていないポインタ、または型指定されていないパラメータ'および' TNotifyEvent '

それがなぜなのか、それを修正する方法を知っている人はいますか?それは私には正しく見えます...

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

c++ - テンプレートパラメータに基づくC++での動的ディスパッチのエミュレート

これは、質問のために大幅に簡略化されています。階層があるとしましょう:

署名付きの非テンプレート関数が必要です:

関数の結果の特定のタイプがどちらかと同じタイプでaありb、大きい方を持っているPrecision場合; 次の擬似コードのようなもの:

ここAで、およびはそれぞれ、およびBの特定のタイプです。インスタンス化の数に関係なく動作したい。RTTIの回答は問題ありませんが、大量の比較表は避けたいと思います。何か案は?abfunctionDerivedtypeid()