|
|
/*
我想在一个对象里调用另一个对象的方法,但是这两个对象之间最好不要有什么太多的关系。
下面代码基本可以实现我的要求,但是另外生成了两个新的class 代码。
不知有没有另好的方法呢?
最好只要一个新CLASS就好了,毕竟中间多了一层虚拟函数的调用,好浪费啊~。
另外,下面代码是可以运行的。
*/
#include <iostream>
template<class PARAM>
struct BaseFunctionClass
{
virtual bool Call(PARAM param) = 0;
};
template<class BASE_CLASS,class PARAM>
class FunctionClass : public BaseFunctionClass< ARAM>
{
public:
typedef bool (BASE_CLASS::*CLASS_FUNCTION)(PARAM);
FunctionClass (BASE_CLASS *the_pointer, CLASS_FUNCTION method) : class_pointer(the_pointer),class_method(method) {}
virtual bool Call(PARAM param) { return (class_pointer->*class_method)(param); }
private:
BASE_CLASS *class_pointer;
CLASS_FUNCTION class_method;
};
using namespace std;
class CT1
{
public:
CT1 () : m_value(9090) {}
bool ShowMe(int a) { cout << "a=" << a << " value=" << m_value << endl; return true; }
int m_value;
};
int main( void )
{
CT1 ctct;
//保存该对象的方法
BaseFunctionClass<int> *fun = new FunctionClass<CT1,int>( &ctct, &CT1::ShowMe );
ctct.m_value = 7894056;
//试着调用
fun->Call(100);
return 0;
}
|
|