当前位置: 首页 > news >正文

typename的用法

1、typename关键字有3个主要用途:

(1)在模板中声明一个参数类型;

(2)用于告诉编译器一个嵌套的类型,而不是静态成员;

(3)模板模板参数时使用,作为类型暂定说明(C++17后使用)。

2、什么是嵌套的类型(或叫嵌套的限定符):在模板编程中,当一个模板参数内部有嵌套的类型时,我们使用作用域运算符::来访问这个嵌套的类型,之所以这样做,是因为当访问类的静态成员变量时,也使用类型::静态成员变量,为了让编译器区分两者,在类型::嵌套的类型前加typename,如:下图,T::const_iterator是一个模板类型以内的类型,而不是静态成员,因此使用typename说明。

template<typename T> void printAll(const T& container) { typename T::const_iterator it = container.begin(); for(;it != container.end(); ++it) { //打印元素 } }

3、模板模板参数的语法:

template<typename T,template<typename,typename> class Container>

第一个typename表示参数类型;

template<typename,typename> class Container表示接受2个类型参数的模板

template<typename T,template<typename typename = std::allocator<T>> class Container>

第一个typename表示参数类型;

template<typename,typename = std::allocator<T>> class Container表示有默认参数的模板

4、为了避免模板模板参数过长,可以使用using来创建类型别名,比如

using myType = typename Container::value_type;(所有的容器当中,都有一个value_type表示容器元素类型,也是模板传入的类型)。

template<typename T> class MyClass { using TypeAlias = T; };
http://www.cnnetsun.cn/news/114431.html

相关文章:

  • 最简单的LangChain和RAG
  • 空压机监控运维管理系统方案
  • 实习面试题-Rust 面试题
  • 视频字幕精确生成方法 用到字幕api开发文档
  • React Fiber 架构解析:如何利用 `requestIdleCallback` 实现时间切片(Time Slicing)
  • SPA 应用中的路由切换内存泄漏:未注销的 Scroll 监听与全局变量
  • 游泳池漆专用施工涂料如何选?专业视角解析耐水抗氯性能
  • 中国RFID设备十大企业综合实力解析
  • C#静态成员总结 常量与只读字段总结 类的继承总结
  • 都说东莞有好的AI销售厂家,实际情况真如此吗?
  • Python开发者必看:一行代码切换GPT-5.2与DeepSeek V3.2,企业级大模型中台搭建实录
  • 浏览器代理实现理想数据抓取
  • LeetCode 01 背包 完全背包 题型总结
  • ubuntu通过公网Ubuntu服务器远程桌面连接私网IPUbuntu
  • Unity学习笔记(十九)GUI控件(三)
  • IPA 深度混淆是什么意思?分析其与普通混淆的区别
  • 33、Linux 内存管理全解析
  • 5.回溯算法
  • 嵌入式模组温控策略
  • 【昇腾CANN训练营·架构篇】打破内存墙:Ascend C 算子融合(Operator Fusion)的极致心法
  • 【昇腾CANN训练营·算法篇】寻找消失的除法器:Newton Iteration 与高精度数学计算的艺术
  • 19、Linux 帧缓冲接口设计与图形库应用
  • 人才发展ℓℓ 人才盘点怎么做?这篇完全应用手册给出答案
  • 真相来了|字节跳动的人才真相:真正拉开差距的,是“人才密度”(附人才密度清单)
  • 力扣(LeetCode) 66: 加一 - 解法思路
  • HC32L130精准延时实现指南
  • 收藏必看!大学生网络安全学习5大方向,校招不踩坑,小白也能逆袭!
  • 收藏!从“黑客梦“到网络安全专家:过来人告诉你自学路线图
  • Bagisto 产品更新后,前台默认语言的内容不更信,其他语言正常。
  • 【收藏】运维转网安的黄金路径:4个高适配岗位+3步落地指南,薪资提升50%