問題タブ [double-dispatch]
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#でのダブルディスパッチ?
私はその用語を聞いたり読んだりしましたが、それが何を意味するのかよくわかりません。
このテクニックはいつ使用する必要があり、どのように使用しますか?誰かが良いコードサンプルを提供できますか?
oop - ポリモーフィズムとマルチプル ディスパッチの違いは何ですか?
……それとも同じものですか?それぞれに独自のウィキペディア エントリがあることに気付きました: Polymorphism、Multiple Dispatchですが、概念がどのように異なるかを理解するのに苦労しています。
編集:そして、オーバーロードはこれらすべてにどのように適合しますか?
c++ - C++でのダブルディスパッチ/マルチメソッド
C++ダブルディスパッチについて質問があります。以下のコードでは、2番目のセットの結果を最初のセットの結果と一致させたいと思います。
実際のタイプはわかりませんが(dynamic_castを試していない限り)、オブジェクトがBaseClassタイプから継承されていることはわかっています。これを達成するための最も効率的な(パフォーマンス面での)方法は何ですか?
しばらくグーグルした後、私はダブルディスパッチとロキマルチメソッドについて知りました。Shapeの例で私が抱えている問題は、私のアプリケーションでは、ProcessorとBaseClassが完全に独立しており、相互に呼び出すことができる共通のメソッドがないことです。次に、プロセッサは1つだけです(つまり、プロセッサから継承するものはありません)。
助けてくれてありがとう。
c++ - ミラー化された階層を持つC ++ダブルディスパッチ
次のクラス階層は、抽象リソース ハンドラーとリソース階層を表しています。どちらも基本クラスとしてインターフェイスを持っています。ここで、これらのインターフェースの下に複数の特定のリソース システムを実装できるシステムを作成することを想像してください。これはほんの一例です。特定のメイン クラスは、stuff から派生したリソースを作成します。作成されたリソースが基本インターフェイスに渡されると、基本リソース クラスへのポインターとして渡されますが、特定のリソースを処理し、その特定の属性にアクセスしたいと考えています。
二重発送については知っていますが、この場合はうまくいかないと思います。RTTI と dynamic_casts を防止したいと考えています。そのような場合を処理するための提案はありますか?
java - Javaメソッドのオーバーロード+ダブルディスパッチ
私のテストコードprint(Parent parent)
でインスタンスを操作するときにオーバーロードされたメソッドが呼び出される理由を誰かが詳細に説明できますか?Child
ここに関係する仮想メソッドまたはJavaのメソッドオーバーロード/解決の特殊性はありますか?Java Lang Specへの直接の参照はありますか?この動作を説明する用語はどれですか?どうもありがとう。
java - 両方とも二重にディスパッチする必要がある 2 つのパラメーターを持つメソッド
2 つのパラメーターを持つメソッドがあるとします。私はそれらを次のように実装しています:
ご覧のとおり、あまりきれいなソリューションではありません。私は二重ディスパッチを使用して実装する予定ですが、両方とも二重ディスパッチが必要な 2 つのパラメーターがあるため、少し困惑しています。アイデアをください。
私はところでJavaで実装しています。
visitor-pattern - パラメータが不足している訪問者パターン
これは Visitor パターンの一般的な問題であるに違いないので、標準的な解決策があるかどうかを確認したいと思います。
メソッドがツリークラス自体に組み込まれているツリートラバーサルをどのように再コーディングできますか?
ビジターを使用するコードに。頭に浮かぶ2つの解決策は次のいずれかです
または、accept(Visitor&) および visit() メソッド自体に引数を追加します。しかし、これは、クラスに組み込まれた元のトラバーサルに勝るものはありません。
さらなる問題として、組み込みトラバーサル メソッドのそれぞれが異なる引数を取る場合、または一部の戻り値と他の戻り値がない場合、またはすべてが同じ型を返さない場合はどうなるでしょうか?
c++ - シングルディスパッチとダブルディスパッチとは何ですか?
私はビジターパターンを次のように書きましたが、シングルディスパッチとダブルディスパッチが何であるかわかりません。AFAIK、シングルディスパッチは呼び出し元のタイプに基づいてメソッドを呼び出しますが、ダブルディスパッチは呼び出し元のタイプと引数のタイプに基づいてメソッドを呼び出します。
ダブルディスパッチはシングルクラス階層で発生すると思いますが、ビジタークラスに2つのクラス階層があるのに、それでもダブルディスパッチと見なされるのはなぜですか。
私が提供したサンプルコードを使用して説明してください。
AFAIK、最初のディスパッチはacceptを呼び出すオブジェクトで発生し、2番目のディスパッチはvisitメソッドを呼び出すオブジェクトで発生します。
ありがとう。
c++ - operator== C++ での二重ディスパッチ
どのように実装すべきか
サブクラスstを比較するには、次のように呼び出されたときに呼び出しが適切にディスパッチされます
c++ - C ++:ビジターパターンに関する疑問
私はビジターパターンとは何か、そしてそれをどのように使うかを知っています。この質問はこれと重複していません。
自分が書いた再利用可能なコードのほとんどを配置し、ほとんどのプロジェクトにリンクするライブラリがあります。
多くの場合、一部のクラスに機能を追加する必要がありますが、これらの新しい機能をライブラリに追加する必要はありません。実際の例を使用しましょう:
このライブラリには、、、およびによって継承されたクラスがありShape
ます。CircleShape
PolygonShape
CompositeShape
私は現在、これらをレンダリングする必要があるグラフィカルアプリケーションを開発していますが、使用するプロジェクトの一部はレンダリングを行わず、他のグラフィカルプロジェクトは使用する可能性があるため、コアクラスにShape
仮想関数を配置したくありませんさまざまなレンダリングエンジン(このプロジェクトではQtを使用していますが、ゲームではOpenGLを使用するため、関数にはさまざまな実装が必要になります)。render
Shape
Shape
render
もちろん、これを行う最も有名な方法は、Visitor Patternを使用することですが、これは私の心にいくつかの疑問を投げかけます。
私のように、どのライブラリのどのクラスも拡張する必要がありますShape
。ほとんどの公共図書館(それらのすべてについて)は、VisitorPatternをサポートしていません。なぜ?どして私がこんな事に?
ビジターパターンは、C++でダブルディスパッチをシミュレートする方法です。applyVisitor
これはC++でネイティブではなく、明示的に実装する必要があるため、クラスインターフェイスがより複雑になります。関数をクラスの関数と同じレベルにする必要はないと思います。これは抽象化を破るようなものです。
明示的にアップキャストShape
するdynamic_cast
方が費用がかかりますが、私にはそれはよりクリーンなソリューションのように見えます。
だから、私は何をすべきですか?すべてのライブラリクラスにダブルディスパッチを実装しますか?提供しているライブラリが私のものShape
ではなく、インターネット上にあるGPLライブラリが見つかった場合はどうなりますか?