我试图分配一个静态成员函数函子如下:函子到静态成员函数和静态成员函数的类型
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 (*)()
)
我也无法弄清楚如何给定义为static functor
,因为它应该为静态数据成员完成。
我让functor是静态的,因为我希望它独立于任何myClass实例。
请问有人可以详细说明static functors
这个主题,以及静态成员函数的类型(至于为什么它是void(*)()
在这种情况下)。它甚至有可能有一个静态成员函数的函数指针?
编辑:
我能够通过使用来解决此一typedef
:
typedef void(*ptr)();
class myClass
{
....
static ptr fptr;
};
ptr myClass::fptr = & myClass::myFunc;
但仍然为什么是类型的静态成员函数void(*)()
?
的行的文件范围声明是的,我undestand。但为什么类型是这样呢? –
(常规)方法有一个隐含的参数(this)。静态方法并非如此。 – Jarod42