随笔-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 {

写成这样像话吗? 拷贝改都不改废物一个。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理