模板参数中的“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 =”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章