問題タブ [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.

0 投票する
5 に答える
23280 参照

c# - C#でのダブルディスパッチ?

私はその用語を聞いたり読んだりしましたが、それが何を意味するのかよくわかりません。

このテクニックはいつ使用する必要があり、どのように使用しますか?誰かが良いコードサンプルを提供できますか?

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

oop - ポリモーフィズムとマルチプル ディスパッチの違いは何ですか?

……それとも同じものですか?それぞれに独自のウィキペディア エントリがあることに気付きました: PolymorphismMultiple Dispatchですが、概念がどのように異なるかを理解するのに苦労しています。

編集:そして、オーバーロードはこれらすべてにどのように適合しますか?

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

c++ - C++でのダブルディスパッチ/マルチメソッド

C++ダブルディスパッチについて質問があります。以下のコードでは、2番目のセットの結果を最初のセットの結果と一致させたいと思います。

実際のタイプはわかりませんが(dynamic_castを試していない限り)、オブジェクトがBaseClassタイプから継承されていることはわかっています。これを達成するための最も効率的な(パフォーマンス面での)方法は何ですか?

しばらくグーグルした後、私はダブルディスパッチとロキマルチメソッドについて知りました。Shapeの例で私が抱えている問題は、私のアプリケーションでは、ProcessorとBaseClassが完全に独立しており、相互に呼び出すことができる共通のメソッドがないことです。次に、プロセッサは1つだけです(つまり、プロセッサから継承するものはありません)。

助けてくれてありがとう。

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

c++ - ミラー化された階層を持つC ++ダブルディスパッチ

次のクラス階層は、抽象リソース ハンドラーとリソース階層を表しています。どちらも基本クラスとしてインターフェイスを持っています。ここで、これらのインターフェースの下に複数の特定のリソース システムを実装できるシステムを作成することを想像してください。これはほんの一例です。特定のメイン クラスは、stuff から派生したリソースを作成します。作成されたリソースが基本インターフェイスに渡されると、基本リソース クラスへのポインターとして渡されますが、特定のリソースを処理し、その特定の属性にアクセスしたいと考えています。

二重発送については知っていますが、この場合はうまくいかないと思います。RTTI と dynamic_casts を防止したいと考えています。そのような場合を処理するための提案はありますか?

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

java - Javaメソッドのオーバーロード+ダブルディスパッチ

私のテストコードprint(Parent parent)でインスタンスを操作するときにオーバーロードされたメソッドが呼び出される理由を誰かが詳細に説明できますか?Child

ここに関係する仮想メソッドまたはJavaのメソッドオーバーロード/解決の特殊性はありますか?Java Lang Specへの直接の参照はありますか?この動作を説明する用語はどれですか?どうもありがとう。

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

java - 両方とも二重にディスパッチする必要がある 2 つのパラメーターを持つメソッド

2 つのパラメーターを持つメソッドがあるとします。私はそれらを次のように実装しています:

ご覧のとおり、あまりきれいなソリューションではありません。私は二重ディスパッチを使用して実装する予定ですが、両方とも二重ディスパッチが必要な 2 つのパラメーターがあるため、少し困惑しています。アイデアをください。

私はところでJavaで実装しています。

0 投票する
0 に答える
284 参照

visitor-pattern - パラメータが不足している訪問者パターン

これは Visitor パターンの一般的な問題であるに違いないので、標準的な解決策があるかどうかを確認したいと思います。

メソッドがツリークラス自体に組み込まれているツリートラバーサルをどのように再コーディングできますか?

ビジターを使用するコードに。頭に浮かぶ2つの解決策は次のいずれかです

または、accept(Visitor&) および visit() メソッド自体に引数を追加します。しかし、これは、クラスに組み込まれた元のトラバーサルに勝るものはありません。

さらなる問題として、組み込みトラバーサル メソッドのそれぞれが異なる引数を取る場合、または一部の戻り値と他の戻り値がない場合、またはすべてが同じ型を返さない場合はどうなるでしょうか?

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

c++ - シングルディスパッチとダブルディスパッチとは何ですか?

私はビジターパターンを次のように書きましたが、シングルディスパッチとダブルディスパッチが何であるかわかりません。AFAIK、シングルディスパッチは呼び出し元のタイプに基づいてメソッドを呼び出しますが、ダブルディスパッチは呼び出し元のタイプと引数のタイプに基づいてメソッドを呼び出します。

ダブルディスパッチはシングルクラス階層で発生すると思いますが、ビジタークラスに2つのクラス階層があるのに、それでもダブルディスパッチと見なされるのはなぜですか。

私が提供したサンプルコードを使用して説明してください。

AFAIK、最初のディスパッチはacceptを呼び出すオブジェクトで発生し、2番目のディスパッチはvisitメソッドを呼び出すオブジェクトで発生します。

ありがとう。

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

c++ - operator== C++ での二重ディスパッチ

どのように実装すべきか

サブクラスstを比較するには、次のように呼び出されたときに呼び出しが適切にディスパッチされます

0 投票する
5 に答える
2895 参照

c++ - C ++:ビジターパターンに関する疑問

私はビジターパターンとは何か、そしてそれをどのように使うかを知っています。この質問はこれと重複していませ


自分が書いた再利用可能なコードのほとんどを配置し、ほとんどのプロジェクトにリンクするライブラリがあります。

多くの場合、一部のクラスに機能を追加する必要がありますが、これらの新しい機能をライブラリに追加する必要はありません。実際の例を使用しましょう:

このライブラリには、、、およびによって継承されたクラスがありShapeます。CircleShapePolygonShapeCompositeShape

私は現在、これらをレンダリングする必要があるグラフィカルアプリケーションを開発していますが、使用するプロジェクトの一部はレンダリングを行わず、他のグラフィカルプロジェクトは使用する可能性があるため、コアクラスにShape仮想関数を配置したくありませんさまざまなレンダリングエンジン(このプロジェクトではQtを使用していますが、ゲームではOpenGLを使用するため、関数にはさまざまな実装が必要になります)。renderShapeShaperender

もちろん、これを行う最も有名な方法は、Visitor Patternを使用することですが、これは私の心にいくつかの疑問を投げかけます。

私のように、どのライブラリのどのクラスも拡張する必要がありますShape。ほとんどの公共図書館(それらのすべてについて)は、VisitorPatternをサポートしていません。なぜ?どして私がこんな事に?

ビジターパターンは、C++でダブルディスパッチをシミュレートする方法です。applyVisitorこれはC++でネイティブではなく、明示的に実装する必要があるため、クラスインターフェイスがより複雑になります。関数をクラスの関数と同じレベルにする必要はないと思います。これは抽象化を破るようなものです。

明示的にアップキャストShapeするdynamic_cast方が費用がかかりますが、私にはそれはよりクリーンなソリューションのように見えます。


だから、私は何をすべきですか?すべてのライブラリクラスにダブルディスパッチを実装しますか?提供しているライブラリが私のものShapeではなく、インターネット上にあるGPLライブラリが見つかった場合はどうなりますか?