C++ 的一个重载问题!
我这有三个c的函数,我想把他们封装成c++的结构,封装成一个类,但是调用关系上出现了一些问题,请各位帮忙看一下,我应该怎么封装,怎么调用.
typedef int (* e)(int h);class a{public int b(int i); int c(int i); int d(int g, e f);};int a::b(int i){ return i;}int a::c(int i){ return i;}int a::d(int g, e f){ return f(g);}int main(void){ class a j; int i; class a *k = &j; i = k->d(5, k->c); return 0;}typedef int (_stdcall * e)(int h); //调用约定 _stdcallclass a{public: int b(int i); static int _stdcall c(int i);调用约定 _stdcall int d(int g, e f);};int a::b(int i){ return i;}int a::c(int i){ return i;}int a::d(int g, e f){ return f(g);}int main(void){ a j; int i; a *k = &j; i = k->d(5, &a::c); return 0;}
[解决办法]
楼主首先要明白为什么要进行封装。像示例的这种情况,根本没有封装的必要。如果楼主是想将这些函数作为一个工具集来实用,放在同一个命名空间下即可。
如果楼主非要通过类来封装功能函数:单纯地封装功能函数作为一个工具集合类的话,建议将函数都作为静态函数进行封装。如下面示例:
class Toolkit{ typedef int (*PFunc)(int h);public: static int func1(int i); static int func2(int i); static int func3(int i, PFunc pf);};int Toolkit::func1(int i){ return i;}int Toolkit::func2(int i){ return i;}int Toolkit::func3(int i, PFunc pf){ return pf(i);}int main(void){ Toolkit::func1(2); Toolkit::func2(3); Toolkit::func3(5, Toolkit::func2); return 0;}