【发布时间】:2013-01-08 16:08:02
【问题描述】:
这是我的情况:
基类,无模板类型:
struct Thing
{
} ;
模板类,扩展了那个基类
template <typename T> struct VertexWriter : public Thing
{
template <typename S>
bool intersects( S* otherThing )
{
// has a body, returns T or F
}
} ;
派生类,CONCRETE 类型(无模板)
struct Rocket : VertexWriter<VertexPNCT>
{
template <typename S>
bool intersects( S* otherThing ) ; // WANTS TO OVERRIDE
// implementation in VertexWriter<T>
} ;
但是template typename<S> bool VertexWriter<T>::intersects不能标记为虚拟,因为它是一个模板类。
有许多类派生自 VertexWriter<VertexPNCT> 特化,因此模板特化 VertexWriter<VertexPNCT> 将不起作用。
所以正常的做法是提供模板特化。
但是Rocket 指定它是一个VertexWriter<VertexPNCT>,所以它不再是一个模板类。它可以专门化或覆盖intersects,就好像它是一个虚函数一样?
【问题讨论】:
标签: c++ templates template-specialization virtual-functions