news 2026/7/7 1:12:01

typename的用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 9:58:04

Iceberg在Hadoop集群使用步骤(适配AI大模型)

Iceberg在Hadoop集群使用步骤在 Cloudera Data Platform&#xff08;CDP&#xff09; 集群中使用 Apache Iceberg&#xff0c;需结合 CDP 的集成能力&#xff08;如 Spark 3、Hive Metastore、Catalog 支持等&#xff09;。以下是 完整、可操作的使用步骤&#xff08;适用于 CD…

作者头像 李华
网站建设 2026/7/4 15:34:44

共享IP和独享IP有什么区别?企业建站必懂的服务器基础

很多老板做网站不会选服务器&#xff0c;共享 IP 和独享 IP&#xff0c;到底有什么区别&#xff1f;第一&#xff1a;稳定性不同共享 IP 多个网站一起用同一个 IP&#xff0c;其中一个网站出问题&#xff0c;可能影响全部网站访问。而独享IP是你一个&#xff0c;用一台服务器的…

作者头像 李华
网站建设 2026/7/7 13:17:59

酵母蛋白:嘌呤含量到底怎么样?

最近在健身圈比较火的酵母蛋白&#xff0c;有一些人会担忧它的嘌呤问题。作为一种新兴的优质蛋白来源&#xff0c;酵母蛋白的嘌呤含量究竟高不高&#xff1f;先给大家揭秘&#xff1a;冲泡后的酵母蛋白饮品属于低嘌呤范围&#xff0c;可以放心喝&#xff01;原因&#xff0c;就…

作者头像 李华
网站建设 2026/7/7 16:09:53

自动驾驶仿真测试:软件测试从业者的专业指南

仿真测试的定义与重要性 自动驾驶仿真测试是一种通过计算机模拟环境、传感器数据和车辆行为来验证自动驾驶系统功能的方法。它不同于传统的实车测试&#xff0c;能够无限重复复杂场景&#xff0c;如极端天气、交通拥堵或突发事故&#xff0c;从而大幅降低测试成本和时间。对于…

作者头像 李华