游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2461|回复: 5

求助:如何设计出类似cout那样的全局对象

[复制链接]

10

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2009-3-18 15:33:00 | 显示全部楼层 |阅读模式
如题,本人需要设计一个类Grahic,该类只能拥有一个对象g,而且能在全局范围内任意一个类中都能使用,例如在方法
void sprite::draw
{
  DWORD* p_buffer = g.viedo_buffer();
}


本人学习过单件模式,尝试过一种烦琐的方案
class Graphic
{
  pubilc:
    DWORD* viedo_buffer();         //获取缓冲指针
    static instance();             //获取实例
    ....
  private:
    Graphic();                     //构造函数
    static Graphic* g;   
}

然后在某个类的方法中
sprite::draw()
{
  DWORD* buffer = Graphic::instance()->video_buffer();
}

但是感觉比只要包含iostream库就能安全使用cout对象实在烦琐多了。本人过去学C语言时是设计一个全局函数get_video_buffer()解决这个问题的。请大虾给我指点一下,如何设计出类似cout那样可以全局唯一使用又不用担心初试化或者被修改的对象。

9

主题

249

帖子

260

积分

中级会员

Rank: 3Rank: 3

积分
260
发表于 2009-3-18 18:58:00 | 显示全部楼层

Re:求助:如何设计出类似cout那样的全局对象

.h里

extern Graphic g;
,.cpp里定义一个

Graphic g;

#include “....h”
.........

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2009-3-19 00:35:00 | 显示全部楼层

Re:求助:如何设计出类似cout那样的全局对象

单件模式?

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-3-19 14:36:00 | 显示全部楼层

Re:求助:如何设计出类似cout那样的全局对象

看看iostream的实现:

iostream文件:
#define __PURE_APPDOMAIN_GLOBAL
__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream cout;//使用extern 关键字声明外部变量。
iosfwd文件:
typedef basic_ostream<char, char_traits<char> > ostream;
ostream文件:
class basic_ostream

//如果你要想cout一样,使用二楼所说的就行了!!

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2009-3-27 19:17:00 | 显示全部楼层

Re:求助:如何设计出类似cout那样的全局对象

打酱油..

5

主题

68

帖子

90

积分

注册会员

Rank: 2

积分
90
QQ
发表于 2009-3-28 02:38:00 | 显示全部楼层

Re:求助:如何设计出类似cout那样的全局对象

二楼正解,使用 extern
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 17:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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