【发布时间】:2017-03-11 00:57:17
【问题描述】:
我试图将一个类方法指向一个全局函数,我见过this
但是没有实例我怎么能做到呢?
考虑一下:
class x
{
public:
int(x::*GetVal)(int);
};
int RtX(int a)
{
return a * 4;
}
// declaration
int(x::*GetVal)(int) = (int(x::*)(int))&::Rtx; // :: global? // error
int main()
{
x a;
cout << (a.*GetVal)(4) << endl;
}
这会返回错误:
[错误] 从类型 'int ()(int)' 到类型 'int 的无效转换 (x::)(int)'
【问题讨论】:
-
至于你的错误,成员函数和非成员函数不一样。成员函数需要调用对象的实例,非成员函数不需要。该对象实例通常作为隐藏参数传递给成员函数,并且由于非成员函数没有该隐藏参数,因此它们在任何方面、形状或形式上都不兼容。
-
作为绑定的替代方法,您还可以使用一个 Lamba,您可以在其中调用成员函数并将其存储在
std::function对象中。 -
另一件事,这使整个事情变得更加不清楚。你想做什么?当它不是静态的时,您不能将函数指针设置为没有实例的类。你需要一个实例化。您想要静态函数指针还是默认函数指针?