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

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

xuwenyan2年前 (2021-11-29)c++1313

函数模板

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

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++函数模板参数类型限定” 的相关文章

    7z的简介和使用

    7z的简介和使用

    7z是一个支持多种压缩格式的开源项目,由Igor Pavlov开发,源码下载位置:https://www.7-zip.org/download.html源码结构项目源码目录结构是如下图:Asm包含主要算法实现的汇编代码,直接使用汇编的好处是可以提高运行效率,当然这对跨平台的支持不是很好。C主要是算法...

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

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

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

    使用GDI、MFC_GDI、GDI+绘制数组RGBA序列

    使用GDI、MFC_GDI、GDI+绘制数组RGBA序列

    学习ffmpeg时遇到一个问题,ffmpeg解码出RGB颜色后怎么绘制到屏幕上,于是将GDI、MFC_GDI、GDI+等方式都记录一下 1:注意按windows的要求,R、G、B、A顺序要调整为B、G、R、A 。 2:GDI不支持透明通道A,透明通道A的值读进去以后没有作用。想要支持透...

    解决程序在xp系统总是莫名奇妙的崩溃问题(/Zc:threadSafeInit- )

    解决程序在xp系统总是莫名奇妙的崩溃问题(/Zc:threadSafeInit- )

    现象:程序在xp系统上面总是莫名其妙的崩溃,检查代码看不出任何问题,感觉代码都很好。即使你远程调试,找到了崩溃的点,当你注释了崩溃点之后,还是会崩溃到别的地方。当你遇到了这种情况的时候,不妨参照一下下面的方法看看,说不定可以解决问题。如何解决?将崩溃程序相关的所有工程代码全部关闭全局变量的线程安全检...

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

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

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