【问题标题】:What is template<> template<typename T> syntax for?什么是 template<> template<typename T> 语法?
【发布时间】: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 会让您更快地得到答案。
  • 抱歉,我已经修复了代码。模板 的相同用法在此处接受的答案中:stackoverflow.com/questions/4189945/…
  • 我很确定您带来的示例中的情况(并在您的帖子中重复)是一个错字,因为代码本身格式错误。不是说没有它可以完成,而是没有它需要完成。我投票结束,因为不可复制,错字。

标签: c++ c++11 templates c++14


【解决方案1】:

回答我自己的问题(感谢 Story Teller 和 Max Vollmer 的提示),此代码无效:

template <>
template < typename T >
class Foo<Foo2<T>>
{
...
};

虽然,关于模板<...> 模板<...> 语法的使用,有必要在模板化类中定义模板化方法。例如:

template < T > template < U > void Foo<T>::function() { }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    相关资源
    最近更新 更多