在ATL的类库中,存在大量的C++模板,特化,偏特化,还是一种模板---基类模板(姑且这么叫吧),可能是平时不多见,在ATL中却是漫山遍野,几乎每一个类都采用了这种实现方式.

先看代码:

Code
class CBase{
public:
    virtual void Methord(){
        std::cout<<"CBase"<<std::endl;
    }
};

template<typename T>
class Drived:public T{
public:
    void CallMethord(){
        T *aT = static_cast<T*>(this);
        aT->Methord();
    }
    void Methord(){
        std::cout<<"Drived"<<std::endl;
    }
};
int _tmain(int argc, _TCHAR* argv[])
{
    Drived<CBase> d;
    d.CallMethord();
    return 0;
}

从运行结果上可以看出.它不仅可以调用基类函数,而且实现了函数重写(override).完成了继承与虚函数可以实现的功能.

还有一个明显的优点,那就是省去虚表结构.小的类也许虚表结构不大,但是大的类或者由于多次继承产生的虚表膨胀就会占去很大的空间.而且虚表采用晚绑定方式,在性能上就会有一定下降.而采用这种方式,在空间与时间都有很多提高。(我想是这样,不过没测试过)

转载于:https://www.cnblogs.com/anran_guojianjun/archive/2009/01/13/1374556.html

ATL中的C++模板相关推荐

  1. 理解ATL中的一些汇编代码

    我们知道ATL(活动模板库)是一套很小巧高效的COM开发库,它本身的核心文件其实没几个,COM相关的(主要是atlbase.h, atlcom.h),另外还有一个窗口相关的(atlwin.h), 所以 ...

  2. freemarker中运算符_如何在Web应用系统表示层开发中应用Velocity模板技术

    软件项目实训及课程设计指导--如何在Web应用系统表示层开发实现中应用Velocity模板技术 1.分离Web表示层的数据处理和展现逻辑的常见的应用技术 分离Web表示层的数据处理和展现逻辑是目前企业 ...

  3. SpringBoot 项目中使用velocity模板(转载)

    (不要使用这种模板了,spring boot最新版已经不支持了.使用FreeMarker吧:http://blog.csdn.net/clementad/article/details/5194262 ...

  4. C++中的类模板详细讲述

    一.类模板定义及实例化 1. 定义一个类模板: 1 template<class 模板参数表> 2 3 class 类名{ 4 5 // 类定义...... 6 7 }: 其中,templ ...

  5. polymer 绑定html元素,使用在Polymer元素内的light dom中定义的模板

    我正在尝试将模板从DOM移动到元素内部. 这是我的要素: BOOM Polymer('bt-sortable-list', { ready: function() { var div = docume ...

  6. spring mvc 渲染html,在Spring MVC中使用Thymeleaf模板渲染Web视图

    Thymeleaf模板是原生的,不依赖于标签库.它能在接受原始HTML的地方进行编辑和渲染.由于没有与Servlet规范耦合,因此Thymeleaf模板能够进入JSP所无法涉及的领域 如果想要在Spr ...

  7. Spring在bean配置文件中定义电子邮件模板

    在上一篇Spring电子邮件教程,硬编码的所有电子邮件属性和消息的方法体中的内容,这是不实际的,应予以避免.应该考虑在Spring bean 配置文件中定义电子邮件模板. 1.Spring的邮件发件人 ...

  8. Spring MVC应用程序中的Thymeleaf模板布局,无扩展

    在使用JSP / JSTL和Apache Tiles几年之后,我开始为我的Spring MVC应用程序发现Thymeleaf. Thymeleaf是一个非常出色的视图引擎,尽管目前缺乏良好的Intel ...

  9. mvc中html对象的方法吗,在MVC中使用jQuery模板进行HTML编码的Json对象

    所以我有能力在我的网站上发表评论.用户进入场命中"后"和我阿贾克斯评论回到其在该行动的结果在MVC中使用jQuery模板进行HTML编码的Json对象 public ActionR ...

最新文章

  1. unordered_map的使用特性
  2. BZOJ4031: [HEOI2015]小Z的房间
  3. CodeWarrior 初探(1) USBDM 芯片检测
  4. 关闭自动更新_Win10系统关闭自动更新方法
  5. 当前最主流的商业模式,普通老板如何打造强大后端实现躺赚的秘诀!
  6. 牛客网Java刷题知识点之数组、链表、哈希表、 红黑二叉树
  7. 【Linux内核】内存映射原理
  8. Ajax解决IE浏览器兼容问题
  9. win10中使用Docker安装svn的简单教程
  10. windows 电脑属性调用程序
  11. linux查看接口的命令,linux shell命令查看接口索引--ip link show
  12. yum安装wget失败,替换yum源为阿里yum源并重亲安装
  13. java web基础 --- URL重定向Filter
  14. 盘点下半年EI国际会议,值得收藏!
  15. 运放放大倍数计算公式_运算放大器基础知识
  16. 基于ssm+java+sql企业名录综合统计系统
  17. 2022 年要了解的新兴安全供应商
  18. 软件测试管理——测试的风险分析
  19. 字节跳动Android开发大牛:90% 成功率的 BATZ Offer 收割机是怎样练成的!
  20. 泰语翻译成中文,常用的入境交通类词汇有哪些?

热门文章

  1. 用java画海绵宝宝_java 方法的重载
  2. openglshader实现虚拟场景_虚拟演播室设计原则
  3. stripfxg php,zzcms v8.2 中的众多cve分析
  4. HTML+CSS+JS实现 ❤️canvas圆形水波进度条动画特效❤️
  5. 基于JavaSwing+Mysql点餐系统设计和实现
  6. linux生成文件自带时间,linux生成固定日期文件及删除一定日期前的文件
  7. step7db块寻址_step7 根据db地址块怎样找I/O点
  8. python实例 83,84
  9. MATLAB基础教程(6)——使用matlab求解线性方程组
  10. 【youcans 的 OpenCV 例程 200 篇】110. 投影和雷登变换