使用WTL实现C++中多态的特性
下面展示一些 内联代码片
。
// WTLStudy.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <atlbase.h>
#include <atlwin.h>
class MyWindow :public CWindowImpl<MyWindow>
{
};
template<class T>
class Edoyun
{
public:
void show() {
T* p = static_cast<T*>(this);
p->Name();
}
protected:
void Name() { std::cout << "Edoyun" << std::endl; }
};
class Sub :public Edoyun<Sub>
{
public:
void Name() {std::cout<<"Sub"<<std::endl;}
};
class Sub2:public Edoyun<Sub2>
{
};
int main()
{
Sub sub;
Sub2 sub2;
sub.show();
sub2.show();
}
输出打印
将 Sub2中的方法实现
打印输出
这种方法的好处在于
1 没有虚函数表(一个虚函数需要4个字节),减少程序体积,节省内存
2不需要使用指向对象的指针,没有虚函数表,所以不会发生再运行时调用空指针指向的虚函数
3 虚函数是再运行时确定调用(查虚函数表),WTL是再编译的时候确定的(运行效率高)