C++ 模板函数的使用
因为C++是强类型的语言,所以不能够像动态语言Python、lua等语言一样,编写一段通用的逻辑,可以将不同类型的变量传进去直接处理。泛型编程解决了这个问题,通过设计模板,摆脱了类型的限制,提高了代码的可重用性。
普通的模板函数:
template<typename T> T compare(const T &a, const T &b){return a <= b ? a : b;}int i = 2, j = 4;int a = compare(i, j);
如果在类里面使用模板函数:
using namespace std;class Test{public:Test(int nParent = 0);~Test();public:template<typename T, typename F, typename R> bool addMap(T &pMap, F pField, R pValue);};
template<typename T, typename F, typename R> bool Test:: addMap(T &pMap, F pField, R pValue){if(isContians(pMap, pField)){return false;}pMap.insert(pField, pValue);return true;}
这边需要说明几点:
1、假设你的模板函数只在类里面使用,模板函数的实现可以放在cpp文件中
2、假设你的模板函数在类外也有使用场景,模板函数的实现必须放在头文件中,如果实现放在cpp文件中,那么恭喜你喜提error: LNK2019: 无法解析的外部符号 "public: void __cdecl XXX 错误一枚,出现这个错误的原因是程序在编译的时候找不到函数的实现(虽然已经声明了函数)
模板函数中类型的判断:
template<typename T> T add(const T a, const T b){cout<<std::is_same<T, int>::value<<endl;//上面的语句能够判断T是否是int类型,如果是会输出truereturn a + b;}
返回值也为类型的模板函数的使用:
template<typename T, typename F, typename R> R Test:: getMapValue(T &pMap, F pField){return pMap.value(pField);}int a = <int>getMapValue(m_mMap, "age");
C++ 模板函数的使用相关推荐
- 【C++】模板函数的声明和定义必须在同一个文件中
1.问题描述 习惯性的将函数的定义和实现,分别写在头文件和源文件(.cpp)中.今天也按照这个习惯实现了一个模板函数.然后编译时报错 ... error: undefined reference to ...
- [转]C++函数模板与模板函数
1.函数模板的声明和模板函数的生成 1.1函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数. 函数模板 ...
- beego 显示html文件,[Beego] 内置的模板函数(不同格式的字符串和html的互转)
在使用beego框架的时候,常常需要把不同形式的字符串转化为html,有时候为了安全考虑会将html转义,而有时候希望能显示html标签.在存储到db中后,再取出来的显示是原本的,即html标签不会生 ...
- 泛函编程—模板函数_类模板
函数业务逻辑一样,只是函数参数类型不同 函数模板的本质:类型参数化--泛型编程 语法: template <typename T> template <class T1,class ...
- ytu 1057: 输入两个整数,求他们相除的余数(带参的宏 + 模板函数 练习)
1057: 输入两个整数,求他们相除的余数 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 177 Solved: 136 [Submit][Stat ...
- 8-1日复习 模板函数 模板类
函数的重载: //函数重载 感觉还是太繁琐 引入函数模板的概念#include <iostream>using namespace std;int add(int x , int y) { ...
- 模板类可以使用虚函数,模板函数不能是虚函数
1.普通的类中怎么使用虚函数,模板类中也可以这么使用虚函数 不过需要注意的是使用模板类定义不同的类型则是两个完全不同的类. 2.模板函数不能是虚函数 编译器期望在处理类定义的时候就能确定虚函数表的大小 ...
- extern 定义_Essential Cython - 2.7 - 定义并使用模板函数
项目地址: https://github.com/tushushu/EssentialCythongithub.com 参考书籍: <Essential C++ 中文版> 编程环境: M ...
- C++ - 模板函数须要类型转换时使用友元(friend)模板函数
模板函数须要类型转换时使用友元(friend)模板函数 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24357301 非模板函数 ...
- 问模板函数、函数模板,模板类、类模板的区别的问题?
问模板函数.函数模板,模板类.类模板的区别的问题? - 赵保龙 - 博客园 问模板函数.函数模板,模板类.类模板的区别的问题? 在C++中有好几个这样的术语,但是我们很多时候用的并不正确,几乎是互相替 ...
最新文章
- ue4 无限地图_用UE4建出来的虚拟世界精灵岛,比现实世界的美上十倍!
- python人脸识别opencv_用python和opencv 做人脸识别
- csp-2019 复赛游记
- 使用磁盘为Linux添加swap
- 3认证老外主任_首批18款App认证名单公布 未来将开展数据安全管理认证
- 犯罪分子社工GoDaddy 员工,获得密币相关网站域名的控制权
- html实现“加入收藏”代码
- BZOJ4399: 魔法少女LJJ
- 08CMS之后台二次开发
- 怎么彻底卸载2345软件、怎么屏蔽2345弹窗
- java为word添加水印,图片水印和文字水印
- (20201015 Solved)docker-compose创建网络ERROR: Pool overlaps with other one on this address space
- 重大利好消息!有PMP和NPDP证书的同学看过来!
- IllegalArgumentException
- select_option设置默认值
- harmonyOS系统是安卓,HarmonyOS华为操作系统
- vue在created调用点击方法_vue.js中created方法的使用详解
- 微信小程序输入框输入换行
- 浅谈nvme sata pci-e m.2,协议 总线 接口的关系。
- 假设有一条绳子长3000m,每天剪去一半,请问需要几天时间,绳子的长度会短于五米?