模板参数中的“typename =”是啥意思?

Posted

技术标签:

【中文标题】模板参数中的“typename =”是啥意思?【英文标题】:What does "typename =" mean in the template parameters?模板参数中的“typename =”是什么意思? 【发布时间】:2015-03-19 03:30:36 【问题描述】:

我在《Effective Modern C++》一书的第 189 页看到了这个表达:

    template<typename T,
             typename = typename std::enable_if<condition>::type>
    explicit Person(T&& n);

我只是想知道“typename =”部分是什么意思。它当然看起来像模板参数的默认参数。但是你不需要像“typename some_name = ...”这样的默认参数吗?第二个模板参数没有名称,在这种情况下我没有看到第二个模板参数被使用。

附:当我在谷歌(或任何其他搜索引擎)上搜索答案时,等号总是被丢弃,这使得几乎不可能找到答案......

【问题讨论】:

【参考方案1】:

这是一个没有名称和默认值的可选模板参数。 它用于应用enable_if 条件;如果条件不满足,则会产生编译器错误。

您可以对普通方法参数使用完全相同的语法。

【讨论】:

澄清这句话:it will create a compiler error if the condition is not met:公平地说这会触发 SFINAE(“替换失败不是错误”)并且未定义构造函数吗? (我对 SFINAE 有点陌生。)

以上是关于模板参数中的“typename =”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

ue4 c++ 模板中的一个小技巧

根据模板模板参数采用的参数数量,部分特化模板的语法是啥?

引用限定的成员函数作为模板参数?

函数接受函数作为模板类型的参数

C++ template<typename> 模板怎么用

从结构中获取所有可变参数模板类型,该结构是函数模板中的类型参数