【发布时间】:2013-08-29 14:54:09
【问题描述】:
我试图将静态成员函数分配给仿函数,如下所示:
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 intellisense 显示:
you can't assign a void ( * )() type to an entity of type void (myClass::*)()
我认为静态函数的类型应该是后者(void ( * )())
我也无法弄清楚如何定义 static functor,因为它应该为静态数据成员完成。
我将仿函数设为静态,因为我希望它独立于 myClass 的任何实例。
谁能详细说明static functors这个话题以及静态成员函数的类型(至于为什么在这种情况下是void(*)())。甚至可以有一个指向静态成员函数的函数指针吗?
编辑:
我可以通过使用typedef 来解决这个问题:
typedef void(*ptr)();
class myClass
{
....
static ptr fptr;
};
ptr myClass::fptr = & myClass::myFunc;
但是为什么还是类型静态成员函数void( * )()?
【问题讨论】:
标签: c++ static-methods static-members functor