游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2436|回复: 4

我想在一个对象里调用另一个对象的方法,但是这两个对

[复制链接]

14

主题

118

帖子

118

积分

注册会员

Rank: 2

积分
118
发表于 2007-1-28 00:14:00 | 显示全部楼层 |阅读模式
/*
我想在一个对象里调用另一个对象的方法,但是这两个对象之间最好不要有什么太多的关系。
下面代码基本可以实现我的要求,但是另外生成了两个新的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&ltARAM>
{
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;
}

4

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2007-1-28 19:58:00 | 显示全部楼层

Re:我想在一个对象里调用另一个对象的方法,但是这两个对

在java里面。
可以直接把那个方法定义成public static

14

主题

118

帖子

118

积分

注册会员

Rank: 2

积分
118
 楼主| 发表于 2007-1-28 23:08:00 | 显示全部楼层

Re:我想在一个对象里调用另一个对象的方法,但是这两个对

楼上的,假如你把方法定义成public static就可以解决我的问题。
那么你就可以说 "这就是为什么我用Java而不用C++的理由之一"....
Orz

15

主题

83

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2007-1-29 12:42:00 | 显示全部楼层

Re: 我想在一个对象里调用另一个对象的方法,但是这两个

silekey: 我想在一个对象里调用另一个对象的方法,但是这两个对象之间最好不要有什么太多的关系。

/*
我想在一个对象里调用另一个对象的方法,但是这两个对象之间最好不要有什么太多的关系。
下面代码基本可...

从本质上讲,这个开销总是存在的,因为你在使用COMMAND模式的时候确实多了一个间接层,那么这个开销就一定存在,只是表现为虚函数调用,也可以表现为解析,总之开销不会消失。你的真正开销在于你使用多态,以至于你必须使用NEW才产生你的函数对象,你应该自己编写内存分配函数。
boost::bind可以看看

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2007-1-29 13:32:00 | 显示全部楼层

Re:我想在一个对象里调用另一个对象的方法,但是这两个对

LZ想要的在boost和loki中都有对应的实现
建议参考甚至直接使用

for your reference:
<<Exceptional c++ style>> 第35条
<<Modern C++ Design Generic Programming and Design Patterns>> 第5章
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 09:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表