CG@CPPBLOG

/*=========================================*/
随笔 - 76, 文章 - 39, 评论 - 137, 引用 - 0
数据加载中……

《C++设计新思维》读书笔记(八)


 
2.3 局部类

你可以在函数中定义class:

1 void Fun(){
2     class Local{}; 
3 }


不过有些限制,local class不能定义静态成员变量,也不能访问非静态局部变量。但它可以用于模板函数:

 1 class Interface{
 2 public:
 3     virtual void Fun()=0;
 4 };
 5 
 6 template <class T, class P>
 7 Interface* MakeAdapter(const T& obj, const P& arg)
 8 {
 9     class Local : public Interface{
10     public:
11         Local(const T& obj, const P& arg)
12             : obj_(obj), arg_(arg){};
13         virtual void Fun(){
14             obj_.Call(arg_);
15         }
16     private:
17         T obj_;
18         P arg_;
19     };
20     return new Local(obj, arg);
21 };


事实证明,任何local classes的方法都可以用“函数外的模板类”来完成,也就是说,并非得局部类不可。不过,局部类可以提高符号的地域性,如上例,Local不能在函数外被继承,类似Java的final。

11章将应用产生所谓“弹簧垫”函数(trampoline functions)。


posted on 2007-12-17 22:13 cuigang 阅读(267) 评论(0)  编辑 收藏 引用 所属分类: 《C++设计新思维》读书笔记


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