这是我的情况:
基类,无模板类型:
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
它可以像虚拟功能一样专门化或覆盖吗?