且行且珍惜
书到用时方恨少非君子
C++博客
首页
新随笔
联系
聚合
管理
随笔-3 评论-4 文章-0 trackbacks-0
句柄类思想
Thinking in c++ 第一版的中文翻译实在是无法忍,偏偏我就有这么一本(不知道哪儿来的:P)。幸好读到了一个从前没意识到的问题,也算是值了:句柄类,也叫Cheshire Cat。
问题背景是这样的:1)在极为安全的领域,即使核心实现已经封闭在库中不可见,但是头文件中的变量定义仍然可能会曝露一些内部信息; 2)在设计初期,实现部分固然需要经常变动,连头文件中变量定义也需要经常变动,因此在重编译的时候头文件也需要编译,有时候导致编译时间过长。句柄类可以解决这类问题:
//
:HANDLE.H -- Handle Classes
#ifndef HANDLE_H_
#define
HANDLE_H_
class
handle
{
struct
cheshire;
//
Class declaration only
cheshire
*
smile;
public
:
handle( );
void doit( );
~handle( );
}
;
#endif
//
HANDLE_H_
这是所有客户程序员都能看到的,其中struct cheshire是没有完全指定的类型说明或类说明,将用来存放真正的变量。在这种技术中,包含具体实现的结构主体被隐藏在实现文件中。
//
:HANDLE.CPP -- Handle implementation
#include
"
handle.h
"
//
Define handle's implementation
struct
handle:cheshire
{
int
i;
}
;
handle::handle()
{
smile
=
(cheshire
*
)malloc(
sizeof
(cheshire));
smile
->
i
=
0
;
}
void
handle::doit()
{
//
do something with i
}
handle::
~
handle()
{
free(smile);
}
句柄类的使用就像任何类的使用一样,包括头文件,创建对象,发送信息。但是通过这样的设计,即隐藏了变量的设计,也使得实现作变动时无需重编译头文件。Bruce说虽然这并不是完美的信息隐蔽,但毕竟是一大进步。
posted on 2007-01-12 19:18
Sunus
阅读(2383)
评论(1)
编辑
收藏
引用
所属分类:
C&C++
评论:
#
re: 句柄类思想
2011-05-11 21:37 |
alex_
struct handle:cheshire {
应该是:
struct handle::cheshire {
写成这样像话吗? 拷贝改都不改废物一个。
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
PHP
句柄类思想
在C++中禁止类继承
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
<
2007年8月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
(3)
C&C++(3)
算法&杂谈
随笔档案
(3)
2007年1月 (3)
搜索
最新随笔
1. PHP
2. 句柄类思想
3. 在C++中禁止类继承
最新评论
1. re: 句柄类思想
struct handle:cheshire {
应该是:
struct handle::cheshire {
写成这样像话吗? 拷贝改都不改废物一个。
--alex_
2. re: 在C++中禁止类继承[未登录]
谢谢提醒,确实~~~
--sunus
3. re: 在C++中禁止类继承
评论内容较长,点击标题查看
--linwen
4. re: 在C++中禁止类继承
“现在,如果你尝试从类A派生其它类将会得到类似下面这样的编译错误。 ”
派生是没有错的,只有在实例化派生类时才错。
--linwen
阅读排行榜
1. 在C++中禁止类继承(3109)
2. 句柄类思想(2383)
3. PHP(409)
评论排行榜
1. 在C++中禁止类继承(3)
2. 句柄类思想(1)
3. PHP(0)