我试图使用上面函数的指针来调用函数,但是它一直显示这个错误:表达式调用的括号前面的表达式必须具有(指向 - )函数类型。有什么帮助吗?
#include<iostream>
using namespace std;
class a
{
public:
a(){}
int f(float m){cout<<"called.\n";return 1;}
};
int main()
{
int (a::*ptr2)(float m) = &a::f;
a *p ,obj;
p = &obj;
obj.*ptr2(.8);
p->*ptr2(.5);
}
答案 0 :(得分:2)
你只是在函数指针调用周围缺少一些括号。
#include<iostream>
class a
{
public:
a(){}
int f(float m) {
std::cout<<"called."<<std::endl;
return 1;
}
};
int main()
{
int (a::*ptr2)(float m) = &a::f;
a *p ,obj;
p = &obj;
(obj.*ptr2)(.8); //note the difference
(p->*ptr2)(.5);
}
在这种情况下,std::invoke
可以非常方便: std::invoke Reference