VC如何动态调用类成员函数

两个类Test1和Test2,两个类都有同一个函数voidFun(constchar*)现有两个类各一个对象t1和t2如何用一个函数指针动态调用两个对象中的函数。这是一个... 两个类Test1和Test2,两个类都有同一个函数void Fun(const char *)

现有两个类各一个对象t1和t2
如何用一个函数指针动态调用两个对象中的函数。
这是一个例子。实际上我的工程有十多个类,有复杂的嵌套关系,所以用条件判断很麻烦。我想用一个函数指针动态调用不同类中的同名同参形式函数,但就无法实现。求各位指点。
展开
 我来答
ldy0628
推荐于2016-12-04 · 超过51用户采纳过TA的回答
知道小有建树答主
回答量:73
采纳率:0%
帮助的人:70.3万
展开全部

如果这些类都是继承关系,直接用虚函数就实现了。

如果这些类没有关系,可以用模板实现,TestFunction即为你统一处理的函数,可以根据实际情况特化,如下:

#include <algorithm>
#include <iostream>
#include <vector>


using namespace std;

class Test1
{
public:
void Fun(const char *s)
{
cout << "Test1::Fun, " << s;
}
};

class Test2
{
public:
void Fun(const char *s)
{
cout << "Test2::Fun" << s;
}
};

template<class T, class Function, class A>
void TestFunction(T *t, Function f, A a)
{
f(t, a);
}

 void main()
{
Test1 t1;
TestFunction(&t1, mem_fun1(&Test1::Fun), "Test1");
Test2 t2;
TestFunction(&t2, mem_fun1(&Test2::Fun), "Test2");
getchar();
}
追问

这个mem_fun1是干什么的,VC++ 6.0支持吗

追答

mem_fun1是STL的仿函数,我用的vs2010,头文件是#include <xfunctional>,<vector>文件里面包含了<xfunctional>头文件,VC6应该支持STL的。

也可以自己照STL写一个仿函数就行了,如下:

#include <iostream>

using namespace std;

class Test1
{
public:
void Fun(const char *s)
{
cout << "Test1::Fun, " << s;
}
};

class Test2
{
public:
void Fun(const char *s)
{
cout << "Test2::Fun" << s;
}
};

template<class T, class Function, class A>
void TestFunction(T *t, Function f, A a)
{
f(t, a);
}

template <class S, class T, class A>
class mem_fun1_t
{
public:
explicit mem_fun1_t(S (T::*pf)(A)) : f(pf)
{
}
S operator()(T *p, A x) const
{
return (p->*f)(x);
}
private:
S (T::*f)(A);
};

template <class S, class T, class A>
inline mem_fun1_t<S, T, A> mem_fun1(S (T::*f)(A))
{
return mem_fun1_t<S, T, A> (f);
}

 void main()
{
Test1 t1;
TestFunction(&t1, mem_fun1(&Test1::Fun), "Test1");
Test2 t2;
TestFunction(&t2, mem_fun1(&Test2::Fun), "Test2");
getchar();
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式