什么" typename ="在模板参数中意味着什么?

时间:2015-03-19 03:30:36

标签: c++ templates metaprogramming generic-programming

我在“有效的现代C ++”一书的第189页看到了这个表达式:

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

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

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

1 个答案:

答案 0 :(得分:17)

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

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