错误:专业成员需要"模板<>"语法
error: specializing member requires 'template<>' syntax
我正在尝试将一些代码从Visual Studio解决方案移植到GCC。代码看起来像这样,我试图理解为什么我会遇到这个问题
template <class BASE, class SHADER>
class Shader : public BASE {
...
...
~Shader()
{
someAssesrt(0);
}
};
typedef Shader< VertexShader, ddVertexShader> VertexShaderBase;
VertexShaderBase::~VertexShaderBase() <-- ERROR HERE
{
}
错误是:
error: specializing member '{anonymous}::Shader< VertexShader, IDirect3DVertexShader9*>::~ <unnamed>::VertexShaderBase< VertexShader, IDirect3DVertexShader9*>' requires 'template<>' syntax
我很难理解此错误和其他一些代码组件。
首先这里发生了什么
typedef Shader< VertexShader, ddVertexShader> VertexShaderBase;
VertexShaderBase::~VertexShaderBase() <-- ERROR HERE
{
}
据我了解,会创建一种类型的VertexShaderBase
,然后实现该类型的析构函数。类型的析构函数不是已经在类型Shader
中定义的吗?如果我明白这一点,那么也许我可能能够弄清楚为什么我会收到此错误。据我了解,Shader<VertexShader, ddVertexShader>
是代码中某处的类型?
error: specializing member '{anonymous}::Shader< VertexShader, IDirect3DVertexShader9*>::~ <unnamed>::VertexShaderBase< VertexShader, IDirect3DVertexShader9*>' requires 'template<>' syntax
我不确定这里发生了什么,帮助理解这段代码会有所帮助。
您始终需要通过将模板放在模板前面来通知编译器您正在专用模板template<>
。如果是部分专业化,则可能会template<class X>
。
如果Microsoft编译器不需要这样做,那么它就做错了。
当专门化模板类的模板函数时,语法变得特别有趣。请参阅 https://stackoverflow.com/a/4995106/13422
相关文章:
- 需要"模板<>"语法 --> 通过函数调用类模板
- 如何创建一个function_list<>类来保存具有相同模板语法的 std::function<>s 向量?
- 模板别名上下文中的模板<>模板<>语法有什么用?
- 仅替换成员函数的模板语法
- 可变模板的模板语法问题
- unique_ptr之外的数组模板语法
- C++:专业成员需要"模板<>"语法
- 此模板语法是否非法
- 错误:专业成员需要"模板<>"语法
- 具有递归大小写结尾的模板语法错误
- c++模板语法说明
- 如何修复 Google OR-Tools 中的 C++03 双尖括号模板语法错误
- 模板语法说明
- C++ 编译器将模板语法视为'<'运算符
- 模板语法错误
- 函数模板语法错误
- 带有函数类型参数的c++模板语法
- c++模板语法模板参数
- 模板语法和无符号类型是什么?
- 用于分类抽象类的模板语法