什么是 template<> template<typename T> 语法?
Posted
技术标签:
【中文标题】什么是 template<> template<typename T> 语法?【英文标题】:What is template<> template<typename T> syntax for? 【发布时间】:2018-09-25 05:19:58 【问题描述】:有时我会看到这样的类专业化代码:
template <>
template < typename T >
class Foo<Foo2<T>>
...
;
对于这样的类:
template < typename T > class Foo ;
template < typename T > class Foo2 ;
我知道这段代码是什么意思,但我的问题是:在类专业化中使用“模板”有什么用,因为没有它也可以完成同样的事情:
template <typename T> Foo<Foo2<T>> ;
在任何情况下,不限于类专业化,这种语法是必要的吗? (模板后跟另一个模板,不是模板模板参数)
【问题讨论】:
11、14 和 17,真的吗? 另外,你能让你的代码不那么伪吗?它不是有效的 C++,因此它不能很好地表明您可能已经或可能没有看到什么。 minimal reproducible example 会让您更快地得到答案。 不确定是否重复,但可能相关:What is the meaning of template<> with empty angle brackets in C++? 抱歉,我已经修复了代码。模板 的相同用法在此处接受的答案中:***.com/questions/4189945/… 我很确定您带来的示例中的情况(并在您的帖子中重复)是一个错字,因为代码本身格式错误。不是说没有它可以完成,而是没有它需要完成。我投票结束,因为不可复制,错字。 【参考方案1】:回答我自己的问题(感谢 Story Teller 和 Max Vollmer 的提示),此代码无效:
template <>
template < typename T >
class Foo<Foo2<T>>
...
;
虽然,关于模板<...> 模板<...> 语法的使用,有必要在模板化类中定义模板化方法。例如:
template < T > template < U > void Foo<T>::function()
【讨论】:
以上是关于什么是 template<> template<typename T> 语法?的主要内容,如果未能解决你的问题,请参考以下文章