`
ah_fu
  • 浏览: 227908 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

template学习:实现一个类似多态的效果,来自WTL的一个技巧

阅读更多
    多态都是在运行时实现的,C++中通过VPTR和VTABLE来提供运行时的动态调用;但是,VPTR和VTABLE的使用影响了性能。WTL中的一个技巧实现了类似多态的功能,并且不会影响性能。
#include <stdio.h>

template 
<typename SubClass>
class Base
...{
public:
    
void Run()
    
...{
        SubClass
* t = (SubClass*)this;
        t
->Func();
    }

    
void Func()
    
...{
        printf(
"Base::Run() ");
    }

}
;

class Child : public Base<Child>  //子类将自己的类型传递给父类
...{
public:
    
void Func()  //子类实现了父类的同名方法
    ...{
        printf(
"Child::Run() ");
    }

}
;

class Child1 : public Base<Child1>
...{
public:

}
;

int main()
...{
    Child a;
    Child1 b;
    a.Run();  
//调用子类的方法
    b.Run();  //调用父类的方法
    return 1;
}


    感觉上这个技巧可能出现问题,因为Base类和Class类的内存布局不一定是上半部分完全相同的。特别是Base类存在虚函数,或者Base类存在虚继承的情况下Child* obj=(Child*)this;这里可能产生错误。
   因为这个技巧是来自WTL的,而WTL又依赖于VC编译器,所以这个技巧应该能够保证使用VC的编译器正常,但是其他编译器就不一定了。

   SO,SO,我宣传了这个技巧,但我不建议使用它。
分享到:
评论

相关推荐

    WTL for MFC Programmer

    对于那些习惯于使用MFC (Microsoft Foundation Classes) 的程序员来说,WTL提供了一个更加灵活且功能强大的替代方案。 #### 二、WTL与MFC的比较 **1. 性能** - **MFC**:由于其庞大的类库结构,MFC可能会导致应用...

    WTL提纲性小结

    WTL(Windows Template Library)是一个高效且轻量级的Windows编程库,它采用C++模板技术构建,专为Windows编程设计,旨在简化Windows API的使用,同时保持高性能。与MFC(Microsoft Foundation Classes)相比,WTL...

    WTL10.0 最终版本 支持vs2019

    WTL10.0是该库的一个重要版本,它支持Visual Studio 2019,这意味着开发人员现在可以在最新的IDE环境下充分利用WTL的功能。 WTL的核心特点包括: 1. **轻量级框架**:与MFC(Microsoft Foundation Classes)相比,...

    自己学习过程中整理的学习文档

    通过实例,你将学习如何创建一个简单的WTL应用程序,从创建窗口到响应用户输入,再到处理复杂的逻辑。 学习过程中,你将了解到C++与WTL结合的优势,例如代码的简洁性、运行时的高效性和对Windows API的直接访问。这...

    Visual+C++编程技巧精选集源代码

    《Visual C++编程技巧精选集源代码》是一个包含丰富的编程示例资源的压缩包,专为深入学习和提升VC++编程技巧而设计。这个资源集合了超过1300个实例,涵盖了各种复杂的编程概念和技术,是开发者们自我提升、实践操作...

    专家门诊 visual c++开发答疑300问

    《专家门诊:Visual C++开发答疑300问》是一本专注于解决Visual C++开发中常见问题和难点的书籍。...书中的每一个问题都可能是一个实际开发中可能遇到的挑战,而每个解答都将是你解决问题的宝贵参考。

    Visual C++程序设计学习笔记(1-12 源码)

    2. **MFC库**:Microsoft Foundation Classes(MFC)是Visual C++提供的一个C++类库,用于构建Windows应用程序。它封装了Windows API,使得开发人员可以更快速、更简洁地创建图形用户界面。 3. ** ATL 和 WTL**:...

    VC++学习版本,好好学习

    这可能是一个关于界面设计或GUI(图形用户界面)编程的实例,可能是通过VC++的MFC库或者WTL(Windows Template Library)创建的一个示例程序,用于展示如何在C++中构建和控制用户界面。 总的来说,这个压缩包提供的...

    beginning Visual C++ 2008

    15. ATL和WTL:讲解轻量级的Active Template Library和Windows Template Library,它们是更高效且适用于特定情况的Windows编程工具。 四、高级主题 16. 文件操作:学习如何读写文件,处理文本和二进制文件,以及流...

    CPP.rar_visual c

    3. 继承:一个类可以继承另一个类的属性和方法,实现代码复用,构建层次化的类体系。 4. 多态:多态性允许不同类型的对象对同一消息做出不同的响应,主要通过虚函数和纯虚函数实现。 二、C++编程思想 1. 设计模式:...

    MFC 学习(完整版)

    同时,掌握MFC也有助于理解和学习其他Windows开发框架,如ATL(Active Template Library)和WTL(Windows Template Library)。所以,无论是初学者还是有经验的开发者,这份资料都是值得珍藏和反复研读的宝贵财富。

    VC知识库缩小版

    "VC知识库缩小版"是一个专门针对Visual C++(简称VC)编程环境的知识资源集合,旨在为学习和使用VC的开发者提供精炼且全面的信息。这个压缩包文件包含了一个名为"vcbase1"的子文件,这可能是一个文档、代码示例或者...

    编程实践:Visual C++进阶100例

    在编程世界中,Visual C++ 是一款强大的集成开发环境(IDE),由微软公司推出,用于创建 Windows 平台上的应用程序。这款工具集成了C++编译器、调试器和其他开发工具,...每一个敲击键盘的瞬间,都将是你成长的见证。

    Visual C++ 知识库

    《Visual C++ 知识库》是一个专门为初学者和开发者提供的资源,涵盖了关于Microsoft的Visual C++编程环境的广泛信息。作为一个高效的开发工具,Visual C++不仅支持C++语言,还提供了集成的开发环境(IDE),包括源...

    VC++开发技术大全代码

    WTL(Windows Template Library)则是一个轻量级的库,适用于开发小型、快速的Windows应用程序。了解并掌握这些框架可以提高开发效率和代码质量。 4. **Windows API**:虽然有MFC这样的高级抽象,但深入理解Windows...

    demo2.zip_界面编程_Visual_C++_

    【描述】"WTL编程类的使用方法及技巧,编程类的使用方法及技巧" 提到了两个关键点:一是WTL编程类的使用方法,二是更广泛的编程类的使用技巧。WTL类库提供了一系列的模板类,用于构建Windows应用程序的UI元素,如...

    VC++深入详解2

    《VC++深入详解2》是针对Microsoft的Visual C++编程环境进行深度剖析的一份资源集合,其中包含了工具盘和源代码,旨在...通过学习这些内容,开发者可以提升自己的编程技巧,更好地应对复杂的Windows应用程序开发挑战。

    Visual c++ PPT课件

    通过这份Visual C++的PPT课件,学习者可以逐步了解并掌握C++的基础知识、面向对象编程原理以及Visual C++开发环境的使用技巧。同时,课件可能还会涵盖一些实战案例,让理论知识与实践相结合,从而更好地理解和运用所...

    jacky_dai的博客文章.pdf

    包括标准模板库(STL)的List、内联函数与宏定义的对比、宏的巧妙使用、Windows Template Library(WTL)的学习资源、报文传输中的进制转换、C++中的static关键字用法、C++的类型转换(Cast)、Windows SDK、Windows消息...

    Visual C++实用教程ppt

    Visual C++不仅是一个工具,更是一个强大的平台,能够帮助开发者实现复杂的应用程序,无论是桌面应用还是游戏开发,甚至是系统级编程。 总之,《Visual C++实用教程》将引导你从入门到精通,掌握C++编程和Visual ...

Global site tag (gtag.js) - Google Analytics