模板中的nullary元函数在boost中

时间:2017-10-15 08:14:38

标签: c++ templates boost

在与Boost(例如here)提供的MPL库相关的文档中,可以找到以下构造:

  

typedef f<> :: type x;

我认为上述有效的唯一方法是 f 是具有可变参数的模板,或者 f 是否具有默认模板参数。然而,在这种情况下,我认为前者不适用,因为MPL库出现在可变参数模板参数之前。

我有两个问题:

  1. 文档是否涉及 f 具有默认模板参数的情况(考虑到编写文档时的语言状态)?
  2. 考虑到语言的当前状态(在发布时,我相信C ++ 17)引用的构造是否还有其他可能性?

1 个答案:

答案 0 :(得分:2)

声明typedef f<>::type x;只要f是一个类模板(或者是&gt; = c ++ 11的模板别名)就无效,并且不接受具有成员类型&#39;类型&#39的相应专业化的参数;。鉴于没有主模板定义可以没有参数,这意味着f或者具有默认参数或者(从> = c ++ 11开始)它是具有空参数包的可变参数模板。

  

文档是否涉及f具有默认模板参数的情况(考虑到编写文档时的语言状态)?

是的,但请记住,MPL通过默认的占位符类型模拟了可变参数。

  

考虑到语言的当前状态(在发布时,我相信C ++ 17)引用的构造是否有其他可能性有效?

就我所知并给出完全如图所示的表达式,唯一的另一种可能性是前面提到的具有空包的可变类/别名模板。