将函数作为参数传递给不同的函数
transfer a function as a parameter to a different function
我正试图将一个函数作为参数传递给另一个函数。
由于某种原因,它不起作用。
//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');
相关文章:
- 如何在C++中将迭代器作为函数参数传递
- 为什么我不能将引用作为 std::async 的函数参数传递
- 节点插件 API 将数组作为函数参数传递
- 将字符串数组作为函数参数传递
- 如何通过 C++ 中的函数参数传递初始值设定项列表的固定大小的初始值设定项列表?
- 我可以动态创建新地图并作为函数参数传递吗?
- 将任意模板向量作为函数参数C++传递
- 将函数指针作为函数参数传递的目的
- C++:通过函数参数传递的值给出不同的结果
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 通过宏将函数参数传递给函数
- C++:访问作为函数参数传递的双指针数组所指向的变量的值
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 将派生类构造函数参数传递给受保护的成员
- 将指向数组的指针作为函数参数传递,这本身就是另一个函数的返回值?
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 如何将派生类作为函数参数传递:如果派生类成员不在父类中怎么办
- 如何将变量作为构造函数参数或函数参数传递
- 当数组对象以函数参数传递时,为什么复制构造函数会自称