- 论坛徽章:
- 0
|
不一定这样,非静态的成员函数也可以在类以外被调用,但是这个类一定要先实例化.
一个例子:
//~Wrapper.h
class Wrapper
{
public:
typedef void (Wrapper::* FunPtr)(void*, void*);
private:
FunPtr getPtr;
public:
FunPtr getExport();
void Fun(void* p1, void* p2);
Wrapper();
virtual ~Wrapper();
};
//~Wrapper.cpp
Wrapper::Wrapper()
{
getPtr = this->Fun;
}
Wrapper::~Wrapper()
{
}
void Wrapper::Fun(void *p1, void *p2)
{
printf("In Wrapper::Fun\n");
}
Wrapper::FunPtr Wrapper::getExport()
{
return getPtr;
}
然后是管理这个公用接口的管理类:
//~Manager.h
template <class wrapper>
class Manager
{
typedef wrapper::FunPtr FunPtr;
FunPtr ptr;
wrapper ins;
public:
Manager();
virtual ~Manager();
void run();
};
template <class wrapper>
Manager<wrapper>::Manager()
{
}
template <class wrapper>
Manager<wrapper>::~Manager()
{
}
template <class wrapper>
void Manager<wrapper>::run()
{
ptr = ins.getExport();
(ins.*ptr)(NULL, NULL);
}
使用过程:
Manager<Wrapper> TestObj;
TestObj.run(); |
|