将函数作为参数传递给不同的函数

时间:2012-08-21 16:23:02

标签: c++ function-pointers

我正在尝试将函数作为参数传递给不同的函数。

由于某种原因它无法正常工作。

//myClass.h
class MyClass
{
public:

typedef int (*MyClass::ptrToMember)(float, char);

  ptrToMember p1;
  MyClass::MyClass();
  void hello(ptrToMember fun);

  int SendIt (float a, char b); 

};



//MyClass.cpp
MyClass::MyClass(){
  p1 = &(MyClass::SendIt);
  hello(p1);

}
int MyClass::SendIt (float a, char b) 
{ 
  std::cout << "MyClass::SendIt "<<a<<std::endl; 

  return 1; 
}

void MyClass::hello(ptrToMember fun){

 int result = (*fun)(12, 'a');
  std::cout << result << std::endl;
}
如果有人能告诉我我的错误是什么,

会很感激。

2 个答案:

答案 0 :(得分:3)

typedef int (*MyClass::ptrToMember)(float, char);
             ^
// your mistake is here

类成员函数的指针声明如下:

typedef int (MyClass::*ptrToMember)(float, char);
                      ^

并且这样调用(测试是类实例 - 也可以是'this'):

 (test.*pointer)(parameters) // if test is automatically allocated

 (test->*pointer)(parameters) // if test is a pointer

decleration运算符为::*,而调用指向成员函数的指针的运算符为.*->*

修改

这一行:

p1 = &(MyClass::SendIt);

实际上必须是:

p1 = &MyClass::SendIt; // without parentheses

答案 1 :(得分:1)

说出来:

typedef int (MyClass::*ptrToMember)(float, char);

// ...

int result = (this->*fun)(12, 'a');