函数指针和成员函数指针求解,编译器混乱了吗?
本帖最后由 css433411 于 2013-01-19 23:15:57 编辑
class Event
{
public:
};
class MouseEvent:public Event
{
public:
};
class BaseClass;
typedef void (BaseClass::*ThisCall)(Event&);
typedef void (*Cdecl)(Event&);
struct question
{
ThisCall pfnThisCall;
CdeclpfnCdecl;
};
class BaseClass
{
protected:
public:
void GiveMeFunction( ThisCall func )
{
Event e;
(this->*func)(e);
}
virtual void vir(Event&)
{
printf("vir base\r\n");
}
};
class SClass :public BaseClass
{
public:
void GiveMeFunction( void (SClass::*func)(MouseEvent&))
{
BaseClass::GiveMeFunction( (ThisCall)func );
}
virtual void vir(MouseEvent&)
{
printf("vir SClass\r\n");
}
};
int _tmain(int argc, _TCHAR* argv[])
{
SClass s;
s.GiveMeFunction(&SClass::vir);
return 0;
}
struct question
{
//ThisCall pfnThisCall;
CdeclpfnCdecl;
};
#include<stdio.h>
#include<iostream>
using std::cout;
using std::endl;
class Event
{
public:
};
class MouseEvent:public Event
{
public:
};
class BaseClass;
typedef void (BaseClass::*ThisCall)(Event&);
typedef void (*Cdecl)(Event&);
class BaseClass
{
protected:
public:
void GiveMeFunction( )
{
Event e;
this->vir(e);
}
virtual void vir(Event&)
{
printf("vir base\r\n");
}
};
class SClass :public BaseClass
{
public:
virtual void vir(Event&)
{
printf("vir SClass\r\n");
}
};
int main(int argc, char* argv[])
{
SClass s;
s.GiveMeFunction();
return 0;
}