C++:指向结构中成员函数的指针
C++: Pointer to Member Function within Struct
这是我上一篇文章的后续问题:C++:初始化结构和设置函数指针
我的新问题是如何在结构中调用指向成员的指针函数?我已将以前的代码修改为:
float MyClass::tester(float v){
return 2.0f*v;
}
struct MyClass::Example{
float(Scene_7::*MyFunc)(float);
float DoSomething(float a){
return (MyFunc)(a); //ERROR, SEE BELOW FOR OUTPUT
}
};
然后,我按如下方式设置函数,并将结果输出到调用中:
struct Example e;
e.MyFunc = &MyClass::tester;
std::cerr << e.DoSomething(1.0f) << std::endl;
我收到以下错误:必须使用'.' 或 '->' 调用指向成员的指针函数...
问题是我不知道该怎么做。我猜我必须在DoSomething
中调用类似 this->*(myFunc)(a)
的东西,但this
引用结构。我尝试搜索"在结构指针到成员函数中",但找不到任何内容。任何帮助或建议都会很棒。我觉得我很接近,但此时这只是语法问题。
恕
我直言,.*
和->*
的运算符优先级已损坏。您需要将操作数括在括号中才能调用。
return (this->*MyFunc)(a);
否则,编译器认为您正在执行this->*(MyFunc(a))
,这显然是无效的。
有趣的是,(this->*MyFunc)
作为独立表达式也是无效的。需要当场打电话。
我不知道你是否有其他错误,做缺乏代码,但你以错误的方式调用成员函数,你这样称呼它们:
return (obj->*MyFunc)(6);
我不确定您是否可以使用this
代替上面行的obj
,因为从声明中,您需要一个指向 Scene_7
类型的对象的指针,因此您需要知道代码中该位置的正确类型的指针。
请记住,. 运算符的优先级高于 * 运算符。因此,在处理点和结构等时,您将需要使用偏执或->运算符,这意味着指针指向什么。
相关文章:
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 将公共但非静态的成员函数与ALGLIB集成
- 使用指向成员的指针将成员函数作为参数传递
- 将重载的成员函数传递给函数模板
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 如何在C++中使用非静态成员函数作为回调函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 关联容器的下界复杂性:成员函数与非成员函数
- 在 C++ 中用派生类型重写成员函数
- 链表的泛型函数remove()与成员函数remove)
- 如何将lambda作为模板类的成员函数参数
- constexpr构造函数需要常量成员函数时出现问题
- 将自由函数绑定为类成员函数
- 区分非成员函数和头文件中的成员函数
- 如何从子成员函数修改父公共成员变量
- 保留对其他类的成员函数的引用
- 在运算符重载定义中使用成员函数(const错误)
- 内联如何影响模块接口中的成员函数
- 将成员函数指针作为参数传递给模板方法