問題タブ [downcast]
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++ - 仮想ベースからのダウンキャストとクロスキャストのどちらが速いですか?
私はパフォーマンスについてあまり心配していないので、これはやや仮説的なものです。実際にどのオプションが一般的に最速/最も効率的か、またはまったく違いがないかどうか疑問に思っています。
オーバーロードをサポートするビジター テンプレートの次のコードがあるとします。
次に、これを使用して一般的な訪問者を作成します。
訪問者を使用すると、最終的にクロスキャストであるdynamic_cast<>
from Visitor
toになります。VTarget<T>
これを実装できるもう 1 つの方法は、仮想ベースを作成することですVisitor
。これにより、Visitor から直接継承する必要がなくなります。Visitor::visit コードのは、仮想ベースからのダウンキャストになります。VTarget<T>
MyVisitor
dynamic_cast<>
Visitor
キャストを実行するとき、あるメソッドは他のメソッドよりも高速ですか? それとも、仮想ベースを持つことでサイズのペナルティを受けるだけですか?
c# - Entity Framework によるダウンキャスト
Employer
の派生クラスとしてEF で定義したプロジェクトがありUser
ます。私のプロセスでは、最終的に雇用主 (または他の種類のユーザー) になるかどうかを知らずにユーザーを作成し、後で変換する必要があります。最初に試しました(Intellisenseは明示的な変換が存在することを示しました):
しかし、実行時に私は得ました:
だから私はコンバーターを書こうとしました:
しかし、私はエラーが発生します:
大丈夫。次に、コンストラクターを次のEmployer
ようにオーバーロードしました。
そして、私ができることを考えました:
しかし、実行するとエラーが発生します:
最後の手段として、私はこれを書いてみました:
User
... GetUser() は提供しないタイプのオブジェクトを返す.Cast<>
ので、そこに到達するために直接クエリを使用しました...しかし、それでも動的プロキシ オブジェクトのキャスト例外が発生します。
だから私の質問は:オブジェクトがEFを介して永続性を持っている場合、どうすればダウンキャストできますか?
c++ - 仮想継承が関係している場合、static_cast を使用してダウンキャストできないのはなぜですか?
次のコードを検討してください。
これは標準 ( ) で禁止されているため、実質的にから継承される[n3290: 5.2.9/2]
ため、コードはコンパイルされません。を継承から削除すると、コードが有効になります。Derived
Base
virtual
このルールが存在する技術的な理由は何ですか?
c# - インターフェイスのダウンキャスティング
IEnumerable
:の評価を強制できるようにするために、次の拡張方法があると仮定してください。
IList<T>
このメソッドの戻り型(つまり、インターフェイスへのダウンキャスト)の代わりにList<T>
、メソッドとその依存関係を特定の実装に結び付けない(つまり、戻り値が常に実際にある場合でも)ことに意味があるかどうかを尋ねたいと思います。 a List
)。
java - 実際のタイプによる方法の使用
次のように、オブジェクトの実際のタイプを使用して、使用するメソッドを定義できることを学びました。
これでメソッドを使用する必要がありますbla(String x)
が、代わりにコンパイラエラーが発生します。私は理由を知っています:タイプfoo
が現在であるためObject
。現在正しく行っているかどうかはわかりませんが、Javaは実際のタイプ(または特定のタイプ)でメソッドを選択するので、ダウンキャストすると代わりにObject
選択されます。メソッドが指定されています。String
Object
または、メソッドでタイプを判別する唯一if(foo instanceof xxx)
の方法ですvoid bla(Object x)?
PS:これについて誤解しないでください:メソッドをオーバーロードできるという意味ではありません。つまり、(定義されたタイプではなく)実際のタイプに基づいてメソッドを選択したいということです。
actionscript-3 - Actionscript 3.0 タイプのダウンキャストの問題
MovieClip を拡張する新しいクラスを実装しました。その名前はbase.MovieClipWithDelays
(「ベース」はパッケージ名です)です。
私のシーンには、 という名前のオブジェクトが含まれていますBlah
。Symbol Properties
私はチェックボックスExport for ActionScript
をオンにしExport in first frame
ました。クラス名を に設定しましT_Idle_0
た。そして、それを Base クラスとして指定しましたbase.MovieClipWithDelays
。
問題は、次のコードが型エラーにつながることです。
それは出力します:
ご覧のとおり、スーパークラス名は問題ありません。それにもかかわらず、それをダウンキャストすることはできません。どうすればそれが可能になり、どうすれば回避できますか?
c++ - ベースから派生への動的キャストがポリモーフィッククラスでのみ許可される理由
重複の可能性:
FAQ:クラスに少なくとも1つの仮想メソッドがある場合にのみdynamic_castが機能するのはなぜですか?
C ++では、クラスのセットの階層を下って動的キャストを実行すると、基本クラスが仮想関数を持っている場合など、クラスがポリモーフィックである状況でのみキャストが許可されることを読みました。この制限の理由は?基本クラスの通常の仮想関数の代わりに純粋仮想関数を使用する方が「安全」ですか?
ありがとう!
java - Javaダウンキャスティング
こんにちはこのようなクラスが1つあります
そして、メッセージクラス
そして1つのサブクラス
私のコードにはこれがあります:
そしてそれは私にこのエラーを与えます:
Exception in thread "main" java.lang.ClassCastException: Message cannot be cast to SMS
SMSにメッセージをダウンキャストしてSMSのshowMessage()メソッドを使用することはできませんか?
c++ - オブジェクト (ポインターではなく) を既知の派生型にダウンキャストしても安全ですか?
スライスの危険性はありますか
どこ
とobj1
とはオブジェクトobj2
であることが保証されていBlock
ますか?
私は使いたくなる:
しかし、SO の object-slicing タグの簡単な説明を読むと、前者を使用したくなります。しかし、厄介なサイレントスライスは本当に望んでいません。
c++ - メッセージパッシングでのダウンキャストを回避するためのデザインパターン
基本クラスMessageHandler
には派生クラスがあります。彼らはお互いにメッセージを伝えたいと思っています。メッセージは異なるクラスのものである可能性がありますが、基本クラスを共有するように作成することができます。MessageHandler
受信したメッセージのダウンキャストを回避するにはどうすればよいですか?receiveMessage
MessageHandlerの仮想関数をテンプレートパラメータ化する効果がある何かを行うことはどういうわけか可能ですか?
基本的に、私は次のコードをダウンキャストしないものに置き換えようとしています。できればコンパイル時のものです。
私はこれができないことを知っていますが、
そして、それぞれがDerivedMessageHandler
専門にしていM
ますか?各ハンドラーがサポートされているメッセージオブジェクトをきれいに処理できるようにするデザインパターンは何でしょうか。