• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

(原創) 如何使用泛型模擬virtual? (C/C++) (template)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Abstract
OO最重要的多型/多態就是用繼承 + virtual來完成,virtual雖好用,但付出的代價就是『更多的記憶體』+『更慢的速度』,本文介紹使用泛型來模擬virtual機制。

Introduction
首先聲明,這並不是我獨創的方法,而是ATL所使用的方式,請參考(轉貼) ATL布幔之下的秘密(3) (C++) (template)

為什麼要用泛型來模擬virtual機制呢?
主要是因為virtual機制需利用到vtable,所以較占記憶體,又得靠vptr在run-time執行多型,所以執行速度較慢,所以ATL才想利用泛型這種compile-time機制讓component盡可能的小,盡可能的快。

Example Code

}


執行結果

Derived::func


Derived class將自己的型別用泛型參數傳進去,利用static_cast將this往下轉成Derived class型別pointer,然後執行Derived class的dofunc(),極類似Template Method的做法。

Consequence
1.Design Pattern用的幾乎都是多型的手法,除了兩個用繼承手法的Template Method和Factory Method,原本以為這兩個pattern無法用泛型實現,但透過這種技巧,也可用泛型實現Template Method和Factory Method。

Reference
(轉貼) ATL布幔之下的秘密(3) (C++) (template)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap