C++模板技术实例(2) 静态多态
来源:互联网 发布:华为进入一组端口 编辑:程序博客网 时间:2024/05/21 22:52
面向对象技术在当今的软件开发中占据有举足轻重的地位,大大提高了代码复用性和可维护性,然而,有利必有弊,C++的多态,实际上用的是一个look-up table,运行时动态查找函数入口点,显然,会有一定的性能损失,当实际运行的代码完成的功能是一个简单计算的时候,性能损失更是明显。
这里我用C++模板的技术,完成一个静态的多态(Static Polymorphism):
运行时多态:
- // 一般情况下,我们采用的是运行时多态,代码大致是这样的
- class Base
- {
- public:
- virtual void method() { std::cout << "Base"; }
- };
- class Derived : public Base
- {
- public:
- virtual void method() { std::cout << "Derived"; }
- };
- int main()
- {
- Base *pBase = new Derived;
- pBase->method(); //outputs "Derived"
- delete pBase;
- return 0;
- }
静态多态(Static Polymorphism):
- // Static Polymorphism
- template <class Derived>
- struct base
- {
- void interface()
- {
- // ...
- // static_case是编译期间完成类型映射,又可以减少运行时性能损失
- static_cast<Derived*>(this)->method();
- // ...
- }
- virtual ~base(){} // 为什么要用virtual,不用多解释了吧:)
- };
- struct derived : base<derived>
- {
- void method() { std::cout << "Derived";}
- };
- int main()
- {
- // 把子类作为模板参数,实例化一个模板
- base<derived> *pBase = new derived();
- // 调用基类的代理方法,注意,这个方法是inline的,不会有函数调用性能损失
- pBase->interface(); //outputs "Derived"
- delete pBase;
- return 0;
- }
- C++模板技术实例(2) 静态多态
- 模板实例化(c++)
- C++模板技术实例(1)
- ASP2HTML WITH TEMPLET (ASP运用模板技术生成HTML静态实例)
- C++模板 静态成员 定义(实例化)
- ASP模板技术应用实例
- C++primer学习:类模板(2)类模板:模板参数,成员模板和控制实例化
- 静态多态之泛型编程(模板)
- C++ Template学习笔记之函数模板(2)——函数模板实例化
- C++ Template学习笔记之函数模板(2)——函数模板实例化
- apache配置伪静态实例 重写技术
- C++(33)模板与泛型之实例化
- STL(二)C++模板技术
- java多态的静态实例
- Objective-C 类,实例成员,静态变量,对象方法,类方法(静态方法),对象,
- C#(asp.net)根据静态模板生成静态(html)页面
- C++模板(2) - 模板和静态变量
- C#-----静态方法和实例方法
- MySQL Storage Engines(转)
- 如何解决Datastage端口不能释放的问题
- 上帝,赐予我一个女人吧。
- 女婴哦。。。
- 删除后缀名为".torrent."的文件
- C++模板技术实例(2) 静态多态
- X Window 和GNOME、KDE
- MSCOMM
- 影像自动配准 之 特征(角点)提取 之 matlab
- Jsp分页显示代码实现 (
- 指针问题,暂未解决
- 常见动物的英文名称
- ExtJs学习笔记(23)-ScriptTagProxy+XTemplate+WCF跨域取数据
- 让Cookies操作变得向Session一样简单