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

标签 c++

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

相关文章:

c++ - 为什么用户定义类型的数组必须调用其默认构造函数?

c++ - 允许在 VS2008 Native C++ 项目中进行特定于开发人员的设置

c++ - 蒙提霍尔程序 C++

c++ - 可编辑多色QLineEdit

c++ - 如何初始化节点为矩阵的链表?

c++ - 如何在C++中获得(无序)集合差异或对称差异?

c++ - 英特尔 AVX 内在函数 : any compatibility library out?

c++ - 复制到 QMap 时出现 QString 错误。范围问题?

C++ : Creating 1-d array which contains the elements from 3-d array

c++ - 关于不同类型的 sizeof() 类