我试图理解回调是如何工作的......在下面的程序中传递 (void*)&obj
并在 (void* pt2Object)
中接收它是令人困惑的我... *pt2Object
将保存值而不是某个变量的地址,但这里将引用传递给它..
我无法理解 ClassA::Wrapper_To_Call_Display
函数是如何传递并在 void (*pt2Function)(void* pt2Object,char* text))
中被接受的...
请帮助我了解它..
//---Program To use Function Pointers As A CallBack---
#include "stdafx.h"
#include <iostream>
using namespace std;
class ClassA
{
public:
void Display(const char* text)
{
cout<<text<<endl;
}
static void Wrapper_To_Call_Display(void *pt2Object,char* text);
};
void ClassA::Wrapper_To_Call_Display(void *pt2Object,char* text)
{
ClassA* myself = (ClassA*)pt2Object;
myself->Display("string");
cout<<text<<endl;
}
void DoIt(void* pt2Object, void(*pt2Function)(void* pt2Object, char* text)) {
pt2Function(pt2Object, "Hi I am Calling back using an argument!!");
}
void Callback_Using_Argument() {
ClassA obj;
DoIt((void*)&obj,ClassA::Wrapper_To_Call_Display);
}
int main() {
Callback_Using_Argument();
return 0;
}
输出
string
Hi I am Calling back using an argument!!
Press any key to continue . . .
最佳答案
DoIt((void*)&obj,ClassA::Wrapper_To_Call_Display);
&obj
不是引用。 &
返回 obj
的地址,它是 ClassA
类的一个实例。
下一个参数 (ClassA::Wrapper_To_Call_Display
) 是函数的地址(请注意,它没有函数调用所需的 ()
)。
*pt2Object will hold the value and not the address of some variable
*pt2Object
是一个保存值的变量。该值是某个其他变量(即指针)的地址。
整个 void*
和转换是一团糟,这不是它应该在 C++ 中完成的方式,而是使用转换运算符。
关于c++ - C++ 中的回调 - 无法理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5762448/