【问题标题】:How do default template arguments work?默认模板参数如何工作?
【发布时间】:2014-06-18 08:53:08
【问题描述】:

我知道有很多关于模板默认参数语法的问题。

通常,答案(与我对它应该如何工作的理解同步)是使用类似的东西:

template <class T = SomeDefault> class T1 {};

最近我想检查 Boost 在其mapped_vector 中使用了哪个地图实现。并找到如下sn-p:

template<class T, class A>
class mapped_vector:

显然,参数A 没有默认绑定,但显然,我可以实例化mapped_vector&lt;int&gt; 就好了。显然,默认参数是以某种方式推断出来的,但是如何推断?

编辑:确切地说,我说的是this file中的第279行

【问题讨论】:

  • 这个类模板可以在定义之前用实际的默认模板参数声明
  • 默认参数可能在某些标头的声明中分配。
  • here
  • 谢谢。不,至少我看到了声明。您能否回答一下这究竟是如何以及为什么起作用的?

标签: c++ templates default-arguments


【解决方案1】:

here 行(@Xeo 的链接)声明模板。 链接中的行定义它。注意:如果您决定声明,则不能在定义中再次指定 a 默认值。

这行得通:(Boost 版本)

template<typename T = int> class A;
template<typename T> class A {};

This won't work:

template<typename T = bool> class A;
template<typename T = int> class A {};

This neither:

template<typename T = int> class A;
template<typename T = int> class A {};

请注意,您必须在 任一 中声明它。 This works:

template<typename T> class A;
template<typename T = int> class A {};

虽然默认值只能声明一次,但它们不必都在同一部分中声明。 This works,但请不要这样做:

template<class T, class U = bool> class A;
template<class T = int, class U> class A {};

... 没有限制,真的。 This works:(责备-或感谢-@Xeo)

template<class T, class U, class V = double> class A;
template<class T, class U = bool, class V> class A;
template<class T = int, class U, class V> class A {};

当然,您不必包含声明。 This works:

template<typename T = int> class A {};

【讨论】:

    猜你喜欢
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多