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

transfer a function as a parameter to a different function

本文关键字:函数 参数传递      更新时间:2023-10-16

我正试图将一个函数作为参数传递给另一个函数。

由于某种原因,它不起作用。

//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;
}

如果有人能告诉我我的错误,我将不胜感激。

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

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

编辑:

此行:

p1 = &(MyClass::SendIt);

实际上必须是:

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

这样说:

typedef int (MyClass::*ptrToMember)(float, char);
// ...
int result = (this->*fun)(12, 'a');