使用模板继承

Inheritance with templates

#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; 

} 

输出: 我是什么 我是东西

目前我正在写一个程序,需要处理
继承类型和专用模板。在上面的示例中,我希望看到 我是一个 我是乙 尽管我处理的是基本 class 数组,但有没有办法正确调用与对象对应的函数?我不确定通过 dynamic_cast 进行类型检查和转换是否是最优雅的解决方案。请注意,这只是一个较大程序的摘录。 提前谢谢你

在主程序中,如下所示的三行创建了一个C*的数组。 因此,该数组的任何元素都被视为 C* 而不管 元素的实际类型是什么。 也就是说,当你将 *array [0] 传递给函数 hi() 时, 被调用的函数是 hi(C) 解析为 通用 hi 函数,而不是任何一个专用函数。

C *array [] = {new A,new B};
hi (*array [0]);
hi (*array [1]);

为了使 hi<A> 被调用,您要么必须存储指针 到 A* 类型变量中的新对象,或者您需要将 C*A*.

在这种情况下,C 的虚函数在 AB 中被覆盖, 可能会更好地达到目的。