2009-04-20 20 views
0

OO言語で動的バインディングを実装するために使用される2つの方法は何ですか? Smalltalkのような純粋なOOLとOOLの混合のために動的バインディングが実装されているように、 はC++と同じですか?OO言語の動的バインディング実装

答えて

1

私は2つの方法があるかどうかわかりません。純粋なものか、混在しているものかはわかりません。

基本的に、C++は仮想テーブルディスパッチを使用します - 各インスタンスは関数のテーブルを持ちます(C++の場合はテーブルへのポインタを持ちますが、ディスパッチメカニズムでは何の役割も果たしません)。 x.my_method()を呼び出すと、コンパイラはそれを知っています。オブジェクトの2番目のメソッドであるため、仮想メソッドテーブルの2番目のポインタにジャンプするコードを生成します。

動的言語(およびObjC)では、通常、実行時にmy_methodという名前が検索され、見つかった関数が実行されるメソッド辞書がどこかで解決されます。

さまざまなアプローチがあります.COMでは、インターフェイスを検索エンジンで検索します。そのvtableからメソッドを実行します。

時には、2番目のアプローチを高速化するために、switch文のようなコード(たとえば、オブジェクトの種類に応じてswitch)が生成されることがあります。

関連する問題