[解決済み] C++のダイナミックディスパッチとレイトバインドの違いは何ですか?
質問
最近、Dynamic Dispatch について読んだことがあります。 ウィキペディア を読みましたが、C++における動的ディスパッチとレイトバインドの違いを理解することができませんでした。
それぞれの仕組みはどのような時に使われるのでしょうか?
Wikipediaからの正確な引用です。
動的ディスパッチは、レイトバインディング(ダイナミックバインディングとも呼ばれる)とは異なります。操作の選択という文脈では、バインディングは名前と操作を関連付ける処理を指します。ディスパッチとは、名前がどの操作を指すかを決定した後に、その操作の実装を選択することを指します。動的ディスパッチでは、コンパイル時に名前を多相な操作にバインドしても、実行時まで実装を選択しない(C++の動的ディスパッチがそうなっている)。しかし、レイトバインドは動的ディスパッチを意味します。なぜなら、名前が参照する操作を選択するまで、ポリモーフィック操作のどの実装を選択するかができないからです。
どのように解決するのですか?
これに対するかなりまともな回答は、実際には、次のような、遅いバインディングと早いバインディングに関する質問の中に組み込まれています。 programmers.stackexchange.com にあります。 .
要するに、レイトバインディングとは オブジェクト -側、動的ディスパッチは機能側を指します。レイトバインディングでは タイプ は実行時のバリアントです。dynamic-dispatchでは、実行される関数やサブルーチンがバリアントとなります。
C++では、実際にはレイトバインディングはありません。 は既知だからです。 (必ずしも継承階層の最後ではなく、少なくとも正式な基底クラスまたはインターフェイス) が知られているからです。しかし、私たちは する は仮想メソッドとポリモーフィズムによる動的ディスパッチを持っています。
私が提供できる遅延結合の最も良い例は、Visual Basicの型付けされていない"object"です。実行時環境はあなたのために遅延結合の重い仕事をすべて行います。
Dim obj
- initialize object then..
obj.DoSomething()
というメソッドの名前付き検索を実行するために、コンパイラはランタイムエンジンのために適切な実行コンテキストを実際にコード化します。
DoSomething
と呼ばれるメソッドの名前付き検索を行い、適切にマッチするパラメータで発見された場合、基礎となる呼び出しを実際に実行します。実際には
何か
を継承している) ので、オブジェクトの型は既知です。
IDispatch
をサポートし
GetIDsOfNames()
など)。しかし、限り
言語
は
タイプ
はコンパイル時には全く不明であり、その変数が
DoSomething
がどのようなメソッドであるのかさえもわかりません。
obj
は実際に
は
をランタイムが実行点に到達するまで
C++の仮想インターフェイスなどがどのようなものかはすでにご存知だと思いますので、わざわざダンプする必要はありません。C++ 言語が単にこれを行うことができないことは明らかだと思います。C++は強く型付けされています。それは ができます。 (は多相仮想メソッド機能によって動的ディスパッチを行うことができます(そして、明らかに行っています)。
関連
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】std::cin.getline( ) vs. std::cin