찾다

 >  Q&A  >  본문

c++ - STL模板部分特例化。

天蓬老师天蓬老师2803일 전690

모든 응답(2)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-17 13:05:03

    C++的模板一般是用于泛型(也就是一份代码给多种类型共用),但是也可以用于非类型(Non-type template parameter),可以是整型、字符、布尔这些可以通过字面量明确判定等价的类型

    你平时声明一个类型模板参数可能是 template <typename T>,而这里Non-type模板参数是 template <bool B>,就这点区别而已。如果要详细说enable_if这个模板技法,关键不是在Non-type,也不是在partial spec,而是在于SFINAE,你学习一下这方面的内容。

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-17 13:05:03

    enable_if上面写着template<bool _test>,所以自然要填true/false进去。

    在使用的时候,你会发现如果一个表达式expr的结果为true,那么enable_if<expr>::type就是存在的。所以你就可以写这样的代码:

    template<typename T>
    __forceinline T Copy(typename enable_if<sizeof(T)>=4, T>::type const& t)
    {
        return t;
    }
    

    来测试一个类型是否不小于4个字节。如果是原样返回,如果不是就编译错误。

    회신하다
    0
  • 취소회신하다