C++:将函数指针与成员函数一起使用

标签 c++ function-pointers pointer-to-member

我试图将一个函数作为参数传递给另一个函数,而它们恰好是同一类的成员函数。

我遇到了一个奇怪的错误,我不知道是什么问题。

这是我的功能:

void myClass::functionToPass()
{
   // does something
}

void myClass::function1(void (*passedFunction)())
{
   (*passedFunction)();
}

void myClass::function2()
{
   function1( &myClass::functionToPass );
}

但是,我收到以下错误:

   cannot convert parameter 1 from 'void(__thiscall myClass::*) (void)' 
   to 'void(__cdecl*)(void)'

那么是什么给了?我觉得我已经尝试了所有变体来尝试让它发挥作用。您甚至可以为成员函数传递函数指针吗?我怎样才能让它发挥作用?

注意:将 functionToPass 设置为静态并不是一个真正有效的选项。

最佳答案

您可以将函数指针传递给成员函数。但这不是您的代码在做什么。您对常规函数指针(void (*passedFunction)() 是常规函数指针)和指向成员函数的指针(&myClass::functionToPass 是指向成员函数)。它们不是一回事,也不兼容。

你可以像这样重写你的代码

void myClass::function1(void (myClass::*passedFunction)())
{
   (this->*passedFunction)();
}

现在您的代码正在使用指向成员函数的指针,但这当然意味着您将无法传递常规函数指针。

关于C++:将函数指针与成员函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7073524/

相关文章:

c++ - 查找批号是否在多个间隔中的最快方法

C++成员函数指针和STL算法

指向对象的 C++ 函数指针

c++ - 是否可以修复 iostream cout/cerr 成员函数指针打印为 1 或 true 的问题?

c++ - 在这种情况下,如何在 C++ 中正确地将成员函数作为参数传递?

c++ - C++ OpenCV 视觉库是否适合这种图像分割案例?

c++ - C++ 中的priority_queue 与自定义比较器

c++ - C++ 中的单元测试

c - 指向 C 中函数的指针

c++ - 将函数作为参数传递给不同文件中的不同函数