問題タブ [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++ - 多形バイナリ関数
、、、の3 つの形状クラスCircle
がありSquare
、ConvexPolygon
関数があります。
多態的な関数が欲しい
上記の形状固有のメソッドを呼び出して、交差のマトリックスを埋めます。
C ++でこれを正確に行うことは不可能だと思いますが、交差行列を計算するコードを変更せずに新しい形状タイプを追加できる限り、他のソリューションで問題ありません。
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、マシンコードをチェックしますか?)