C++ Primer 5th笔记(chap 16 模板和泛型编程)函数模板显式实参

2024-03-28 08:48

本文主要是介绍C++ Primer 5th笔记(chap 16 模板和泛型编程)函数模板显式实参,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 返回类型不清楚的时候,尾置返回允许我们在参数列表之后声明返回类型

template ctypename It> ??? & fcn (It beg, It end) {
// 处理序列
return *beg; / / 返回序列中一个元素的引用
}template ctypename It> auto fen (It beg, It end) -> decltype (*beg)
{
// 处理序列
return *beg; / / 返回序列中一个元素的引用
}vector<int> vi = {1,2,3,4,5 };
Blob<string> ca = { "hi", "bye" };
auto &i = fen (vi.begin ( ), vi.end ( ) ); / / fen 应该返回 int &
auto & s = fen (ca.begin ( ) , ca.end ( ) ); / / fen 应该返回 strings

2. 标准库的类型转换( type transformation) 模 板

有时我们无法直接获得所需要的类型, 得借助“标准库的类型转换模板”获得元素类型。

  • 给定一个迭代器 beg
  • remove_reference<decltype (*beg) >::type 将 获 得 beg 引 用 的 元 素 的 类 型 : decltype ( *beg) 返 回 元 素 类 型 的 引 用 类 型。
  • remove_reference::type 除去引用,剩下元素类型本身。

组合使用 remove_reference、 尾置返冋及 decltype, 我们就可以在函数中返回元素值的拷贝:

/ / 为了使用模板参数的成员, 必须用 typename
template <typename It> auto fcn2 (It beg, It end) typename remove_reference<decltype (*beg) >::type  {
/ / 处理序列
return *beg; / / 返回序列中一个元素的拷贝
}

注意, type 是一个类的成员, 而该类依赖于一个模板参数。 因此, 我们必须在返回类型的声明中使用 typename 来告知编译器, type 表示一个类型

2.1

每个模板都有一个名为 type 的 public 成员, 表示一个类型。 此类型与模板自身的模板类型参数相关, 其关系如模板名所示。
如果不可能( 或者不必要) 转换模板参数, 则 type成 员 就 是 模 板 参 数 类 型 本 身 。 eg. 如 果T是 一 个指针类型,则remove pointer::type 是T指向的类型。 如果T不是一个指针,则无须进行任何转换,从而 type 具有与 T 相同的类型
在这里插入图片描述

这篇关于C++ Primer 5th笔记(chap 16 模板和泛型编程)函数模板显式实参的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855088

相关文章

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数