使用最终说明符专门化 C++ class 模板
Specialize C++ class template with final specifier
我有一个模板和一个专业化定义如下:
template<typename T>
struct SomeTemplate final
{
};
template<>
struct SomeTemplate<int> final
{
};
int main()
{
SomeTemplate<int> test; // <-- error
}
使用 Visual C++ 2012 编译出现以下错误:
error C2913: explicit specialization; 'SomeTemplate<T>' is not a specialization of a class template
with
[
T=int
]
它编译得很好并且在我删除时做正确的事情
final
说明符
- 专业
template<>
第一种情况对我来说有些意义,因为很可能 final
确实也限制了模板的特化(而不仅仅是继承)。第二种情况对我来说似乎有点奇怪,因为我认为这应该是一个语法错误。
这种行为是否正确?
我不确定它是否是 Visual C++ 2012 的错误,您的原始代码可以在更新版本的 VC++ here.
中正常编译
- as it may very well be that final does also restrict specialization of templates (instead of only inheritance)
不,final specifier与模板专业化无关。
Specifies that a virtual function cannot be overridden in a derived class or that a class cannot be inherited from.
和
- The second case seems a bit strange to me, as I thought this should be a syntax error.
是的,如果删除 template<>
.
,它应该是语法 error
我有一个模板和一个专业化定义如下:
template<typename T>
struct SomeTemplate final
{
};
template<>
struct SomeTemplate<int> final
{
};
int main()
{
SomeTemplate<int> test; // <-- error
}
使用 Visual C++ 2012 编译出现以下错误:
error C2913: explicit specialization; 'SomeTemplate<T>' is not a specialization of a class template
with
[
T=int
]
它编译得很好并且在我删除时做正确的事情
final
说明符- 专业
template<>
第一种情况对我来说有些意义,因为很可能 final
确实也限制了模板的特化(而不仅仅是继承)。第二种情况对我来说似乎有点奇怪,因为我认为这应该是一个语法错误。
这种行为是否正确?
我不确定它是否是 Visual C++ 2012 的错误,您的原始代码可以在更新版本的 VC++ here.
中正常编译
- as it may very well be that final does also restrict specialization of templates (instead of only inheritance)
不,final specifier与模板专业化无关。
Specifies that a virtual function cannot be overridden in a derived class or that a class cannot be inherited from.
和
- The second case seems a bit strange to me, as I thought this should be a syntax error.
是的,如果删除 template<>
.