在 C++ 中,模板是一种强大的工具,可以帮助我们编写通用的代码,提高代码的重用性和灵活性。模板在函数和/或类的结合下,存在诸多花样,其调用方法也各异,本文将以示例代码的形式抛砖引玉。
函数模板
函数模板是一种通用的函数定义,可以用来创建多个函数版本,以处理不同类型的参数
template <typenameT>``Tadd(Ta, Tb) {` `return a + b;``}`` `` ``voidusing_function_template()``{` `// 调用 add<int>(1, 2),返回 3` `auto result1 = add<int>(1, 2);` `auto result11 = add(1,2);` `// 调用 add<double>(1.5, 2.5),返回 4.0` `double result2 = add(1.5, 2.5);``}
类模板
类模板允许我们定义通用的类,它可以处理多种不同类型的数据。类模板的语法形式如下:
template <typenameT>``classPair {``private:` `T first;` `T second;``public:` `Pair(Tf, Ts) : first(f), second(s) {}``};`` `` ``voidusing_class_template()``{` `Pair<int> p1(1, 2);` `Pair p1(1, 2);//大于等于C++17, CTAD` `Pair<double> p2(1.5, 2.5);``}``
之前的C++版本中,模板类,声明对象时要指定其类型;C++17后,拥有了CTAD(之前浅析CTAD中有提到过),可以由编译器自动推导。
普通类的模板成员函数
在普通类中,可以定义成员函数模板,这些成员函数模板可以接受不同类型的参数。
classMyClass {``public:` `// 成员函数模板` `template <typenameT>` `voidprint(Tvalue) {` `std::cout << "Value: " << value << std::endl;` `}``};`` `` ``intusing_normal_class_function_template() {` `MyClass obj;` `obj.print<int>(5);` `obj.print(5.5);` `obj.print("Hello");`` `` ` `return0;``}
普通类的模板函数调用,可以类比模板函数的调用,只是类的模板函数调用是基于对象的。
类模板的成员函数
类模板的成员函数可以是普通的成员函数,也可以是成员函数模板。例如,我们可以为上面的 Pair 类添加一个成员函数模板来比较两个键值对的大小:
template <typenameT>``classPair {``private:` `T first;` `T second;``public:` `Pair(Tf, Ts) : first(f), second(s) {}` `//普通成员函数` `TgetFirst() const { return first; }` `TgetSecond() const { return second; }`` `` ` `//模板成员函数` `template<typenameU>` `boolIsFirstEqual(Uu)` `{` `return (u==first)?true:false;` `}``};`` `` ``voidusing_calss_template_functions()``{` `Pair<int> p{3,4};` `//普通成员函数` `//直接调用即可` `p.getFirst();`` `` `` ` `//模板成员函数` `//调用函数需要主动指定类型或有编译器推导` `p.IsFirstEqual<double>(3.0);``}
在上面的例子中,针对模板类分别定义了其普通成员函数和模板成员函数,使用模板类声明对象后,依次调用了其普通成员函数和模板成员函数。
总结
本文列举了模板函数和/或模板类的使用案例。以代码示例的形式说明了函数模板、类模板、普通成员函数、模板成员函数的使用方法。
题外话
黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。