我试图将静态成员函数分配给仿函数,如下所示:
class myClass
{
public:
static void (myClass::*fptr)();
static void myFun()
{
}
};
(void (myClass::*)()) myClass::fptr = &myClass::myFun; // doesn't work
int main()
{
myClass obj;
myClass::fptr = &myClass::myFun; // neither does this works
return 0;
}
上述任务无效。
至少要检查静态成员函数的类型(因为我不确定)我写了以下语句main
myClass::fptr = &myClass::myFun;
VS2010 智能感知显示:
you can't assign a void ( * )() type to an entity of type void (myClass::*)()
我认为静态函数的类型应该是后者(void ( * )()
)
我也无法弄清楚如何为 a 提供定义,static functor
因为它应该为静态数据成员完成。
我将仿函数设为静态,因为我希望它独立于 myClass 的任何实例。
有人可以详细说明这个主题static functors
以及静态成员函数的类型(至于为什么会void(*)()
出现这种情况)。甚至可以有一个指向静态成员函数的函数指针吗?
编辑:
我能够通过使用来解决这个问题typedef
:
typedef void(*ptr)();
class myClass
{
....
static ptr fptr;
};
ptr myClass::fptr = & myClass::myFunc;
但是为什么仍然是静态成员函数的类型void( * )()
?