【发布时间】:2015-04-18 20:24:47
【问题描述】:
#include<iostream>
using namespace std;
class C
{
public:
C (){};
virtual void nothing()=0;
virtual ~C (){};
};
class A : public C
{
public:
A (){};
virtual void nothing(){};
};
class B:public A
{
public:
B(){};
void nothing(){};
};
template <class T>
void hi(T){
cout << " i am something\n";
}
template <>
void hi<A>(A)
{
cout << " I am A\n";
}
template <>
void hi<B>(B)
{
cout << " I am B\n";
}
int main ( )
{
C *array [] = {new A,new B};
hi (*array [0]);
hi (*array [1]);
delete array [0];
delete array [1];
return 0;
}
输出: 我是东西 我是个东西
目前我正在编写一个必须处理的程序
继承的类型和专门的模板。在上面的例子中,我希望看到
我是一个
我是乙
尽管我正在处理基类数组,但有没有办法正确调用与对象对应的函数?我不确定通过 dynamic_cast 进行类型检查和转换是否是最优雅的解决方案。请注意,这只是一个较大程序的摘录。
提前谢谢你
【问题讨论】:
-
您尝试多态地使用您的对象,但模板实例化发生在编译时。正如您所建议的,您需要运行时类型检查。
标签: class templates inheritance base