問題タブ [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.
delphi - 「並列」クラス階層をリンクする方法は?
各クラスが特定のTComponentの子孫に対応する小さなクラス階層があります(たとえば、TComponent、TCustomAction、TMenuItemにそれぞれ対応する子孫TActionFrobberとTMenuItemFrobberを持つ基本クラスTDefaultFrobber)。今、私は次のようなファクトリ(?)関数が必要です。
if-elseカスケードまたはRTTIの代わりに仮想関数または同様のものを使用するためにこれを何らかの方法でリファクタリングできますか?
編集:今のところ私の解決策:
Cesar、Gamecat、mghieに感謝します。
c++ - RTTIの費用はどれくらいですか?
RTTIを使用することでリソースがヒットすることは理解していますが、どのくらいの大きさですか?私が見たところどこでも「RTTIは高価だ」とだけ言っていますが、実際には、メモリ、プロセッサ時間、または速度を保護するベンチマークや定量的データを提供するものはありません。
では、RTTIはどれくらいの費用がかかりますか?RAMが4MBしかない組み込みシステムで使用する可能性があるため、すべてのビットが重要になります。
編集:S。Lottの答えによると、私が実際に行っていることを含めるとよいでしょう。 クラスを使用してさまざまな長さのデータを渡し、さまざまなアクションを実行できるため、仮想関数のみを使用してこれを行うことは困難です。いくつかのを使用するとdynamic_cast
、さまざまな派生クラスがさまざまなレベルを通過できるようにすることでこの問題を解決できるようですが、それでも完全に異なる動作を可能にします。
私の理解でdynamic_cast
は、RTTIを使用しているので、限られたシステムで使用することがどれほど実現可能か疑問に思いました。
delphi - Delphi 用の完全な VCL クラス ブラウザ
Delphi に付属していた古いクラス階層のポスターを覚えていますか?
すべての Delphi クラス用の完全なクラス階層ブラウザが必要です。これには、作成してパレットにインストールしたカスタム クラスと、サードパーティ コンポーネントが含まれます。理想的には、クラス名で簡単に検索できます (「単語全体のみ」の検索を含むため、部分一致はカウントされません)。
近いものは2つしか見たことがありません。
1) GExpets Class Browser - うまく機能しますが、インストールされているすべてのコンポーネント/クラスを自動的にロードするわけではありません。これは私が望んでいるものです。私が知る限り、すべてのソースユニットを手動でインポートする必要があります....これはかなり面倒です。また、「単語全体のみ」の検索も許可されていないため、共通の「サブネーム」を持つクラスの検索に時間がかかることがあります。
2) Eagle / DevExpress CDK - 完全なクラス リストを自動的にロードし、見事に動作するように見えますが、D7 以前でのみ使用可能であり、クラス ブラウザー自体であることにあまり重点を置いていません。「セレクター。
すでにこれを行うものはありますか?そうでない場合、最低限、自己参照クラス名テーブルを構築するアプリを作成するのはどれほど難しいので、少なくともデータベース/ツリービュー コンポーネントにスローして、継承/祖先などを簡単に表示できます。 ?
delphi - クラスの新しいインスタンスを作成するにはどうすればよいですか?
さまざまな種類のクラスインスタンスのリストがあります。何を作成するかを確実に知らなくても、クラスの新しいインスタンスを作成できる必要があります。関連するすべてのオブジェクトは同じ祖先を持っています。オブジェクトのメンバー変数の実際のコピーは簡単です...問題があるのは新しいオブジェクトの作成です。
確かに私はこのようなことをすることができました:
それは「開放/閉鎖原則」に従わないでしょう。
最初は、「Result:=MyObjectTypeInstance.Create;」のようなことができると思いました。しかし、それはデストラクタの問題のために期待どおりに機能しませんでした。
これが私がこれをどのように行うべきかについての最新の推測です...
これはもっと簡単だと思いました!
ご協力ありがとうございました!
delphi - カスタム プロパティのプロパティ タイプ名を取得する方法は?
Delphi 2007 では、プロジェクトに新しい文字列型を追加しました。
このプロパティはクラスで使用されます:
実行時に、RTTI を使用してプロパティ FirstName の名前を取得したいと考えています。私はそれが String40 であることを期待しています:
ただし、この例では PropTypeName は「string」です。正しいプロパティ タイプ名「String40」を取得するにはどうすればよいですか?
delphi - Delphi クラスに仮想コンストラクタがあるかどうかを検出するにはどうすればよいですか?
たとえば、このクラスに (実行時に) 仮想コンストラクターがあることを確認する方法はありますか?
たとえば、このコードでは、Clazz によって参照されるクラスに仮想コンストラクターがあるかどうかをテストしたいと思います。
Delphi 6 から 2009 で動作する RTTI を使用するなど、簡単な解決策はありますか?
c++ - C++ RTTI 継承により、クラス サイズが増加する
C++ では、問題は単純です。
私は2つのクラスを持っています.1つは実装の一部としてもう1つを含んでいます.
ここで問題は、sizeof(B) とタイプ B のオブジェクトを実行するときに A が B の一部である場合、構造 B が 1 バイト大きくなることです。A には 100% 非仮想メンバーのみが含まれます (仮想テーブルは必要ありません)。 typeid チェックの必要はありません。B から不要なバイトを完全に削除する方法 (コンパイラ ディレクティブなど) はありますが、B を介して A のメンバー関数にアクセスする方法はありますか?
余分なバイトは、A の名前「A」に char* を追加したコンパイラであるとしか考えられませんが、他のアイデアが役立つ場合があります。
delphi - Delphi クラスが抽象宣言されているかどうかを確認する方法は?
クラスが抽象として宣言されているかどうかを確認するためにDelphiでRTTI(または他のもの)を使用することは可能ですか? 何かのようなもの:
c++ - std::__non_rtti_object 例外が生成されるタイミングと理由は?
私は Visual Studio を使用しており、有効な動的キャストを実行しています。RTTI が有効になっています。
編集:より現実的になるようにコードを更新しました
私のデバッガーは、例外がスローされたときに in_ptr が正しいタイプであると言います。Google は特に役に立たないようです。何か案は?乾杯。
delphi - バリアントのコンテンツ タイプの文字列表現?
最初に、私の英語についてお詫び申し上げます。今私の問題に。
TypInfo.GetEnumName() を使用して Variantのコンテンツタイプの文字列表現を取得するにはどうすればよいですか。私は次のことを試しましたが、運が悪いと数値表現が得られます。
ありがとうございました。