模板特化的多维度挖掘
  EC73qDgVNYjz 2023年11月02日 22 0
C++

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

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

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

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

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

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

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

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

  好的,事情到这里结束。  

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   19天前   30   0   0 C++
  BYaHC1OPAeY4   12天前   32   0   0 C++
  yZdUbUDB8h5t   15天前   22   0   0 C++
  oXKBKZoQY2lx   3天前   12   0   0 C++
EC73qDgVNYjz