C ++:使用带有成员函数的函数指针

时间:2011-08-16 04:03:23

标签: c++ function-pointers member-function-pointers

我正在尝试将一个函数作为参数传递给另一个函数,它们都碰巧是同一个类的成员函数。

我遇到了一个奇怪的错误,我无法弄清楚问题是什么。

以下是我的功能:

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静态不是一个真正有效的选项。

2 个答案:

答案 0 :(得分:11)

您可以将函数指针传递给成员函数。但这不是你的代码正在做的事情。常常的函数指针(void (*passedFunction)()是常规函数指针)和指向成员函数的指针(&myClass::functionToPass是指向成员函数的指针)之间的混淆。它们不是同一个东西,它们不兼容。

您可以像这样重写代码

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

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

答案 1 :(得分:1)

正如其他人所指出的,你的错误在于传递的函数指针的类型。它应该是void (myClass::*passedFunction)()

在C ++中使用指向成员函数的指针是一个很好的tutorial