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

c++ - 多形バイナリ関数

、、、の3 つの形状クラスCircleがありSquareConvexPolygon関数があります。

多態的な関数が欲しい

上記の形状固有のメソッドを呼び出して、交差のマトリックスを埋めます。

C ++でこれを正確に行うことは不可能だと思いますが、交差行列を計算するコードを変更せずに新しい形状タイプを追加できる限り、他のソリューションで問題ありません。

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

c++ - C ++で二重のディスパッチ/ビジターが必要になるのは正確には何ですか

ソリューションの実装とダブル ディスパッチ/ビジター パターンは理解していますが、このパターンが必要なコンパイル時と実行時に何が起こるかわかりません。

たとえば、このコード:

二重ディスパッチがなければ、by_const_ref への 2 回目と 4 回目の呼び出しは B() を A オブジェクトに解決しません。

この記事から: https://en.wikipedia.org/wiki/Double_dispatch#Double_dispatch_in_C++名前マングリング、コンパイル時間、および実行時の vtable 解決が含まれることは理解していますが、正確な方法はわかりませんでした。

名前マングリングの部分については、コンパイルされたオブジェクトを調べましたが、特別なものは見つかりませんでした。

vtableについては、 g++ -fdump-lang-class でダンプしましたが、そこにも多くの情報があるようには見えませんでした。

したがって、私の要求。正確に何が起こったのか、おそらくこの動作をチェックする方法を理解したいと思います(nmなどのツールを使用して、vtable、マシンコードをチェックしますか?)