当前位置:首页 > c++ > 正文内容

c++函数模板参数类型限定

xuwenyan1年前 (2021-11-29)c++950

函数模板

函数模板可以实现对不同数据类型做统一操作,比如比较两个数据的大小:

template<typename T>
bool compare(T& a,T& b) {
  return a < b;
}

函数模板的调用

void main() {
  bool ret = compare<int>(5, 10);
  ret = compare<float>(5.0f, 10.0f);
}

函数模板参数类型限定

一个函数声明为了模板函数,那就意味着可以给该函数传入任意的参数类型,但是可能模板函数内部实现并不支持某些类型,此时我们就需要给模板函数做参数类型限定。比如如何实现上面的函数只支持int和short类型。

  • 方法1

template <typename T> struct Checker;
template <> struct Checker<int> { typedef int Type; };
template <> struct Checker<short> { typedef int Type; };

template <typename T>
bool compare(typename Checker<T>::Type a, typename Checker<T>::Type b) {
  return a < b;
}
  • 方法2

template<typename T>
typename std::enable_if<std::is_same<int, T>::value || std::is_same<short, T>::value, bool>::type
compare(T a, T b) {
  return a < b;
}

上面的 compare函数就只支持传入int和short类型了,如果传入其它参数类型就会报错,如float类型。

    文章作者:xuwenyan
    版权声明:本文为本站原创文章,转载请注明出处,非常感谢,如版权漏申明或您觉得任何有异议的地方欢迎与本站取得联系。

    扫描二维码推送至手机访问。

    版权声明:本文由艺文笔记发布,如需转载请注明出处。

    本文链接:https://www.xuwenyan.com/archives/2165

    标签: C++编程模板
    分享给朋友:

    “c++函数模板参数类型限定” 的相关文章

    C++智能指针基本原理

    C++智能指针基本原理

    什么是智能指针?最简单来说就是会自动释放内存的指针,使用方便,不用担心内存泄漏问题。它其实就是通过封装,利用对象的析构函数释放申请的内存,基本上自动释放的用法都是利用析构函数去做一些释放工作。如:自动释放的句柄智能指针的基本实现class TestClass {  p...

    C++如何实现窗口全屏显示

    C++如何实现窗口全屏显示

    窗口全屏,直接上代码:void FullScreen(HWND hwnd) {   //去掉所有边框,解决虚拟机win10任务栏显示问题   DWORD style = ::GetWindowLo...

    C++指针*为什么靠后会比较好?

    C++指针*为什么靠后会比较好?

    大多数书中和大神的代码里,往往指针的*都是靠变量而不是靠类型的,这主要是为了不造成我们第一眼对变量类型的误解和对指针类型的误解,比如: int* p1,p2 我们一眼看上去是不是通常会觉得p1、p1都是一个int*的指针呢?因为我们通常会误把int*当作一个类型,然而无论int*还是i...

    VC的ATL工程向导同时生成一个PS工程是做什么的?可以不要吗?

    VC的ATL工程向导同时生成一个PS工程是做什么的?可以不要吗?

    例如,我用VC2015的工程向导新建一个ATL的工程名字叫myAtl,那么VC会同时给我生成一个叫做myAtlPS的工程。这个myAtlPS工程是做什么的?什么情况下可以不需要它?什么情况下它又是必须存在的? PS工程是什么?可以不要吗? 这个PS工程叫做代理与存根(proxy&nbs...

    ATL实现windows右键菜单扩展(ContextMenu)

    ATL实现windows右键菜单扩展(ContextMenu)

    右键菜单,即用户右击shell对象时弹出的上下文菜单(context menu)。本文记录了如何创建右键菜单的基本过程,跟着步骤一步一步来,即可创建出一个右键菜单工程。第一步,新建一个ATL工程Visual Studio—>新建项目—>ATL—>使用默认配置(一直按下一步即可)。注...

    C++ 获取进程所在目录(进程全路径)

    C++ 获取进程所在目录(进程全路径)

    打开windows任务管理器,会看到很多的进程在运行,随机挑选一个,如何通过c++代码获取某一个进程的所在全路径呢?这也是在windows软件开发中经常遇到的需求。通过进程名获取进程全路径由于可能很多进程叫同一个名字,所以获得的结果也有可能是多个#include <windows.h...