gpt4 book ai didi

c++ - 在 C++ 中声明从不同类模板继承的类模板

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:31 26 4
gpt4 key购买 nike

抱歉,标题令人困惑,但我会尝试在这里详细说明。我无法通过搜索找到这个特定问题,所以如果我错过了它,请指出正确的主题...

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

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>
{
//...
};

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

关于c++ - 在 C++ 中声明从不同类模板继承的类模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13959698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com