VC如何动态调用类成员函数
两个类Test1和Test2,两个类都有同一个函数voidFun(constchar*)现有两个类各一个对象t1和t2如何用一个函数指针动态调用两个对象中的函数。这是一个...
两个类Test1和Test2,两个类都有同一个函数void Fun(const char *)
现有两个类各一个对象t1和t2
如何用一个函数指针动态调用两个对象中的函数。
这是一个例子。实际上我的工程有十多个类,有复杂的嵌套关系,所以用条件判断很麻烦。我想用一个函数指针动态调用不同类中的同名同参形式函数,但就无法实现。求各位指点。 展开
现有两个类各一个对象t1和t2
如何用一个函数指针动态调用两个对象中的函数。
这是一个例子。实际上我的工程有十多个类,有复杂的嵌套关系,所以用条件判断很麻烦。我想用一个函数指针动态调用不同类中的同名同参形式函数,但就无法实现。求各位指点。 展开
展开全部
如果这些类都是继承关系,直接用虚函数就实现了。
如果这些类没有关系,可以用模板实现,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是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();
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询