gpt4 book ai didi

c++ - C++ 中的回调 - 无法理解

转载 作者:太空宇宙 更新时间:2023-11-04 12:19:45 28 4
gpt4 key购买 nike

我试图理解回调是如何工作的......在下面的程序中传递 (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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com