C++ enable_if 模板特化实例(函数返回值特化、函数参数特化、模板参数特化、模板重载)
1. enable_if 原理
关于 enable_if
原理这里就不细说了,网上有很多,可以参考如下教程,这里只讲解用法实例,涵盖常规使用全部方法。
1. 所需头文件
#include <type_traits>
2. 返回参数特化
//the return type (bool) is only valid if T is an integral type
template <typename T>
typename std::enable_if<std::is_integral<T>::value, bool>::type
is_odd(T i)
{
return bool(i % 2);
}
3. 函数参数特化
场景1:只有一个函数
template <typename T>
int fun(T i, typename std::enable_if<std::is_integral<T>::value, int>::type = 0) { return 1; }
场景2:函数重载(效果等同于“4. 模板参数特化之模板重载”)
//此模板 T 接收 integer 型参数
template <typename T>
int fun(T i, typename std::enable_if<std::is_integral<T>::value, int>::type = 0) { return 1; }
//此模板 T 接收非 integer 型参数
template <typename T>
int fun(T i, typename std::enable_if<!std::is_integral<T>::value, int>::type = 0) { return 2; }
4. 模板参数特化
方法1:
//the second template argument is only valid if T is an integral type
template <typename T,
typename = typename std::enable_if<std::is_integral<T>::value>::type
> //enable_if 的第二个参数是 void 型,在 typename = typename ... 场景下可以不特别指出第二个参数,在没有 = 号的场景下,不仅要指出而且还要给一个默认值,如“方法2”
bool is_even(T i)
{
return bool(i % 2);
}
方法2:
//the second template argument is only valid if T is an integral type
template<typename T,
typename std::enable_if<std::is_integral<T>::value, int>::type = 0
>
bool is_even(T i)
{
return bool(i % 2);
}
5. 模板参数特化之模板重载(效果等同于“2. 函数参数特化 > 场景2:函数重载”)
未完 ......
点击访问原文(进入后根据右侧标签,快速定位到本文)
C++ enable_if 模板特化实例(函数返回值特化、函数参数特化、模板参数特化、模板重载)的更多相关文章
- 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
[源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...
- JS函数 返回值的函数 return sum;或者result = add2(3,4);
返回值的函数 思考:上一节函数中,通过"document.write"把结果输出来,如果想对函数的结果进行处理怎么办呢? 我们只要把"document.write(sum ...
- Js基础知识5-函数返回值、函数参数、函数属性、函数方法
函数返回值 所有函数都有返回值,没有return语句时,默认返回内容为undefined,和其他面向对象的编程语言一样,return语句不会阻止finally子句的执行. function testF ...
- c语言main函数返回值、参数详解(返回值是必须的,0表示正常退出)
C语言Main函数返回值 main函数的返回值,用于说明程序的退出状态.如果返回0,则代表程序正常退出:返回其它数字的含义则由系统决定.通常,返回非零代表程序异常退出. 很多人甚至市面上的一些书籍,都 ...
- c++11之获取模板函数的参数个数和函数返回值类型
本文演示c++需要支持c++11及以上标准 获取参数个数 1.模板函数声明 template <class R, class... Args> R getRetValue(R(*)(Arg ...
- Python学习教程(learning Python)--2.3.4Python函数返回值
本节讨论Python函数返回值问题. Python和C语言一样,也可以在函数结束时返回一个值.但在定义自己的Python函数时,是不需要指定返回值数据类型的,这和Python不关心变量的数据类型是一致 ...
- C++ 需要返回值的函数却没有返回值的情况 单例模式
昨天在看前些天写的代码,发现一个错误. #include <iostream> using namespace std; class singleton { public: static ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- python学习之函数返回值
python中函数返回值的方式有2种: 1.return语句 说明:return语句执行完后,函数后续的代码将不会被执行 2.yield语句 说明:yield语句返回的是一个迭代器对象,可以通过nex ...
- 获得函数返回值类型、参数tuple、成员函数指针中的对象类型
//function_traits.h,获得函数返回值类型.参数tuple.成员函数指针中的对象类型 //参考https://github.com/qicosmos/cosmos/blob/maste ...
随机推荐
- [FUZZ]文件上传fuzz字典生成脚本—使用方法
文件上传fuzz字典生成脚本-使用方法 原作者:c0ny1 项目地址:https://github.com/c0ny1/upload-fuzz-dic-builder 项目预览效果图: 帮助手册: 脚 ...
- 10.2.1.1-NAT+PAT综合详解
- fmex挂单挖矿
最近fmex上线挂单挖矿,针对挂单写了个程序,"跟随盘口,避免成交",0成本薅羊毛. 代码在 https://github.com/xiaoxiaoleo/fmexminer 使用 ...
- onenote 每天输入网络密码
1.问题:只局限 内网 笔记本的弹出输入远程内网服务器用户名密码的情况,每次重启电脑后又会要求输入,否则同步失败 2.解决 控制面板-windows用户-凭据管理器-添加凭据-从上到下一次输入 ip ...
- nginx retryfiles
# Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; #根据路由设 ...
- php报错syntax error, unexpected T_GOTO, expecting T_STRING,报错文件与行数指向以下代码,是什么原因?
本机php版本是5.3.8,Apache/2.2.21public function goto($url, $msg=NULL) {if ($msg) {$this->jsAlert($msg) ...
- sqllite 学习-1
C# SQLite 数据库操作学习: https://www.cnblogs.com/leemano/p/6578050.html SQLite 之 C#版 System.Data.SQLite 使用 ...
- Opencv图片明暗处理
Opencv图片明暗处理 #include <iostream> #include <opencv2/opencv.hpp> using namespace std; usin ...
- React错误收集
1. Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/ ...
- Ideal 使用帮助手册
1.设置Ideal启动时选择工作空间 将Reopen last project on starup 取消勾选