まず、thisの質問が明確に私の疑いを説明していないことを明らかにする。コンテキストをクリアにする。私はC/C++の関数ポインタに関してこの問題を特に尋ねています。レイトバインディングのメリットは何ですか? C++の関数ポインタの文脈で一つの例を挙げよう
私は初期バインディングとレイトバインドの違いとその動作を知っています。私が理解したいことはC/C++で関数ポインタを使用した一例で、次のされています。多くの教科書に
、それは言及されています:遅延バインディングの
利点は、それがより柔軟であるということですどの関数を呼び出すかについての決定は、実行時まで にする必要はないため、早めに バインドを実行してください。
また、それは言及:遅延バインディングで
は、プログラムが ポインタに保持されているアドレスを読み、そのアドレスにジャンプすることがあります。これには1つの余分なステップが含まれ、 はわずかに遅くなります。ここ
#include <iostream>
using namespace std;
int Add(int nX, int nY)
{
return nX + nY;
}
int Subtract(int nX, int nY)
{
return nX - nY;
}
int Multiply(int nX, int nY)
{
return nX * nY;
}
int main()
{
int nX;
cout << "Enter a number: ";
cin >> nX;
int nY;
cout << "Enter another number: ";
cin >> nY;
int nOperation;
do
{
cout << "Enter an operation (0=add, 1=subtract, 2=multiply): ";
cin >> nOperation;
} while (nOperation < 0 || nOperation > 2);
// Create a function pointer named pFcn (yes, the syntax is ugly)
int (*pFcn)(int, int);
// Set pFcn to point to the function the user chose
switch (nOperation)
{
case 0: pFcn = Add; break;
case 1: pFcn = Subtract; break;
case 2: pFcn = Multiply; break;
}
// Call the function that pFcn is pointing to with nX and nY as parameters
cout << "The answer is: " << pFcn(nX, nY) << endl;
return 0;
}
、好まれるべき以下の例のように、遅延バインディングと事前バインディングを使用する利点はありません。
int nResult = 0;
switch (nOperation)
{
case 0: nResult = Add(nX, nY); break;
case 1: nResult = Subtract(nX, nY); break;
case 2: nResult = Multiply(nX, nY); break;
}
cout << "The answer is: " << nResult << endl;
誰かがのような遅延バインディングが有利、なぜ誰かが事前バインディングそれを上に選ぶべきであるところの下に簡単な例を挙げて説明してもらえますか?
実行時にプラグインを追加する例が1つあります。Word文書にExcelスプレッドシートを埋め込み、それをWordから編集できるのはどうですか?実際には、ドキュメントフォーマットやそれを編集するアプリケーションを作成することができ、Wordはプログラムに遅くバインドすることができ、ユーザーはそれを使用することができます。これらは、レイトバインディングの例です。利点があるかどうかは、あなた次第です。 –
私は特にC/C++ **のw.r.t **関数ポインタを求めています。誰かが保留を解除して答えてもらえますか? –
レイトバインディングは 'C/C++の関数ポインタ'に関係すると思いますか?そうではありません。たとえば、[Visual C++を使用してオートメーションでDocumentPropertiesにアクセスする方法](https://support.microsoft.com/en-us/kb/238393)を参照してください。これはlateバインディングを使用してMS Wordを自動化する 'C++ 'コードです。使用または必要とされる「関数ポインタ」はありません。 – dxiv