当前位置 : 主页 > 手机开发 > 其它 >

声明一个继承自C中不同类模板的类模板

来源:互联网 收集:自由互联 发布时间:2021-06-19
抱歉这个令人困惑的标题,但我会在这里详细说明.我无法通过搜索找到这个特殊问题,所以如果我错过了它,请指出我正确的线程…… 我有一个类模板依赖于我用作基类的一个参数: tem
抱歉这个令人困惑的标题,但我会在这里详细说明.我无法通过搜索找到这个特殊问题,所以如果我错过了它,请指出我正确的线程……

我有一个类模板依赖于我用作基类的一个参数:

template <class TVertex>
class DrawExecutorDX11
{
public:
    DrawExecutorDX11( );
    virtual ~DrawExecutorDX11( );
    void AddVertex( const TVertex& vertex );

protected:
    TGrowableVertexBufferDX11<TVertex> VertexBuffer;
};

我想要做的是从这个类模板继承,同时向子类添加另一个类模板参数.我对语法的尝试将是这样的:

template <class TVertex, class TInstance>
class DrawInstancedExecutorDX11<TInstance> : public DrawExecutorDX11<TVertex>
{
public:
    DrawInstancedExecutorDX11( );
    virtual ~DrawInstancedExecutorDX11( );

    void AddInstance( const TInstance& data );

protected:
    TGrowableVertexBufferDX11<TInstance> InstanceBuffer;
};

我希望这个配置允许我声明子类模板的实例,如下所示:

DrawInstancedExecutorDX11<VertexStruct,InstanceStruct> myExecutor;

但是,VS2012甚至没有考虑编译子类,并且表示它正在等待DrawInstancedExecutorDX11类之后的分号.说实话,我以前从未尝试过这种类型的模板安排,所以我想知道是否还有其他人这样做过.如果是这样,是否存在我正在制作的基本语法错误或其他问题?在此先感谢您提供任何帮助或指导!

如果在类名后面使用任何角度括号,则表示模板专门化,而不是主模板.正确的主类模板是:

template <class TVertex, class TInstance>
class DrawInstancedExecutorDX11 : public DrawExecutorDX11<TVertex>
{
    //...
};

在该类中,您可以引用模板参数TVertex和TInstance,在该类之外,您可以使用DrawInstancedExecutorDX11< SomeVtxType,SomeInstType>.

网友评论