假如我有一个需求,就是如果传入的参数是int类型,我就输出int类型,否则就输出T。很显然,根据模板的基础知识,我们可以这么写

template void f(T) {    std::cout << "T\n";}template void f(int) {    std::cout << "int\n";}

  除了这样写,还有别的写法吗。我们可以思考一下……………..这里我们其实可以用std::enable_if_t来实现,它相当于给std::enable_if的type类型起了一个别名,我们先看怎么写。

template std::enable_if_t<std::is_same_v> g(T) {    std::cout << "int\n";}template std::enable_if_t<!std::is_same_v> g(T) {    std::cout << "T\n";}

  假设我现在再提一个需求,就是只能实现一个函数,且只能接受int类型的参数,其它类型均不能通过编译。这时候如果你仅仅单纯地void f(int),那么即便你传入double类型进来,它也会发生类型转换并执行这个函数,这并不是我们想要的。因此,我们可以考虑用std::enable_if_t来实现。

template std::enable_if_t<std::is_same_v> h(T) {    std::cout << "strictly int\n";}

  好的,事情到这里结束。