这是我的情况:
基类,无模板类型:
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不能标记为virtual,因为它是一个模板类。
有许多类派生自VertexWriter<VertexPNCT>特化,因此模板特化VertexWriter<VertexPNCT>不起作用。
所以正常的做法是提供模板特化。
但是Rocket指定它是一个VertexWriter<VertexPNCT>,所以它不再是一个模板类。intersects它可以像虚拟功能一样专门化或覆盖吗?