Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90365
  • 博文数量: 28
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-14 21:55
文章分类

全部博文(28)

文章存档

2011年(1)

2010年(13)

2009年(14)

我的朋友

分类: 项目管理

2010-09-20 23:14:42

抽象角色: 实现算法的轮廓/框架
具体角色: 实现算法的具体步骤
环境角色: 略
实现方法: 1. 纯虚函数+RTTI
         2. 纯虚函数+模板继承
         3. 纯虚函数+动态继承


#include <iostream>
/* 虚函数--运行时识别 */
class CBase {
public:
    int loop(ssize_t counts) {
        while (-1 == counts || 0 == counts--) {
            func();
        }
        return 0;
    }
    virtual void func(void) = 0;
};

class CDerive: public CBase {
public:
    inline void func(void) {
        std::cout << "virtual-derive" << std::endl;
    }
};

/* 虚函数--编译时识别 */
template<typename derive>
class CBase {
public:
    int loop(ssize_t counts) {
        while (-1 == counts || 0 == counts--) {
            func();
        }
        return 0;
    }
    inline void func(void) {
        return downcast()->func();
    }
protected:
    inline derive* downcast(void) {
        return static_cast<derive* > (this);
    }
    inline const derive* downcast() const {
        return static_cast<const derive* > (this);
    }
};
class CDerive: public CBase<CDerive> {
public:
    inline void func(void) {
        std::cout << "template-derive" << std::endl;
    }
};

/* 虚函数--编译时识别 */
template<typename base>
class CDerive: public base {
public:
    int loop(ssize_t counts) {
        while (-1 == counts || 0 == counts--) {
            func();
        }
        return 0;
    }
    inline void func(void) {
        return base::func();
    }
};
class CBase {
    inline void func(void) {
        std::cout << "template-derive" << std::endl;
    }
};


阅读(1297) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-21 16:19:31

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com