模板实现virtual 问题

wojiushi3344 2012-11-28 07:22:59




首先贴出代码,代码下面是问题秒速,各位大侠来帮帮忙!

#include <iostream>
using namespace std;
template <typename T>
class Base
{
public:
Base()
{
cout << "Base::Base" << endl;
pT = static_cast<T*>(this);
}
void fun()
{
cout << "Base::fun" << endl;
}
void doSomething()
{
pT->fun();
}
private:
T* pT;
};

class Drive : public Base<Drive>
{
public:
Drive()
{
cout << "Drive::Drive" << endl;
}
void fun()
{
cout << "Drive::fun" << endl;
}

};

class Drive11 : public Base<Drive11>
{
public:
Drive11()
{
cout << "Drive11::Drive11" << endl;
}
void fun()
{
cout << "Drive11::fun11" << endl;
}
};

int main()
{

class A
{
virtual void fun(){}
};
class B:public A
{
virtual void fun()
};
class C:public A
{
virtual void fun()
};

A* P;
P = new B;
P = new C;

Drive* pDrive = new Drive;
pDrive->doSomething();

Drive11* pDrive11 =new Drive11;
pDrive11->doSomething();

return 0;
}




想用模板来模拟C++中的virtual功能。现在有个疑惑,因为模板的父类不能实例化,失去了
A* P;
P = new B;
P = new C;

只能这样定义
Drive* pDrive = new Drive;
pDrive->doSomething();

Drive11* pDrive11 =new Drive11;
pDrive11->doSomething();
分别定义2个指针。

大家有没有什么办法来只定义一个模板父类的指针,然后通过子类来赋值,实现C++中的virtual功能!!
...全文
122 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gfm688 2012-11-29
  • 打赏
  • 举报
回复
不是模板的父类不能实例化,而是他们的父类是不相同的 模板毕竟只是编译时的多态,不像虚函数是运行时的
wojiushi3344 2012-11-29
  • 打赏
  • 举报
回复
引用 1 楼 gfm688 的回复:
我只想到这样: C/C++ code? 12345678910111213 template <class T> void doSomething() { Base<T> * P; P = new T; P->doSomething(); delete P; } //调用时: doSomething<Drive>(); doSomething<Dr……
呵呵,难道就没有办法用模板来实现指针向上转型吗?
gfm688 2012-11-28
  • 打赏
  • 举报
回复
我只想到这样:

template <class T>
void doSomething()
{
  Base<T> * P;
  P = new T;
  P->doSomething();
  delete P;
}

//调用时:
doSomething<Drive>();
doSomething<Drive11>();

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧