これが私の状況です:
基本クラス、テンプレート化された型なし:
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仮想関数であるかのように特殊化またはオーバーライドできますか?