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