在此SFINAE示例中,“ template <typename U = T>”是什么意思?

时间:2019-08-19 15:35:42

标签: c++ c++11 sfinae

在以下代码示例中:

template<typename T>
struct Foo
{
    template<typename U = T>
    typename std::enable_if<std::is_same<U, int>::value>::type
    MyFunction()
    {
        std::cout << "T is int." << std::endl;
    }

    template<typename U = T>
    typename std::enable_if<std::is_same<U, float>::value>::type
    MyFunction()
    {
        std::cout << "T is not int." << std::endl;
    }
};

template<typename U = T>部分的意义是什么?

当我们创建类型为Foo的{​​{1}}实例时,int将为T。现在我们有另一个类型int,它等于U。因此,它也是T。 (这同样适用于任何其他提供的类型。)由于int,它看起来像是代码的冗余部分。但是,如果我删除了T=U=int,则代码将无法编译(在这种情况下,template<typename U = T>U中被T替换了)。

有人可以详细解释一下编译时在这里发生的事情吗?

我对“那是SFINAE,这就是SFINAE的工作方式”之类的答案不感兴趣。这样的答案是没有用的。

0 个答案:

没有答案