首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++中typename的用法

前言 最近在看STL源码剖析时,遇到关于typename的用法,平常接触到的只是在定义模板参数时使用,直到遇到这个问题我才彻底的查找了typename的用法。...其形式是:typedef+原类型名+新类型名;因此,我们可以知道typename iterator_traits::value_type是类型名;但是感到困惑的是这里为什么要使用typename...typename的常规用法 typename在C++类模板或者函数模板中经常使用的关键字,此时作用和class相同,只是定义模板参数;在下面的例子中,该函数实现泛型交换数据,即交换两个数据的内容...编译器可能认为我们是想实现乘法运算;若我们的本意是想定义一个指针时,这是就需要typename来修饰,即在T::iterator前面加上关键字typename;template class..._type;//定义一个别名..... };typename使用规则 typename在下面情况下禁止使用:模板定义之外,即typename只能用于模板的定义中非限定类型,比如int,vector<

3.1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    成功解决“C7510 “某某”: 类型 从属名称的使用必须以“typename”为前缀“

    问题描述 我们在使用C++编写程序,特别是使用template定义模板时经常会遇到编译器报错“类型 从属名称的使用必须以“typename”为前缀”,如图: 遇到这种情况该如何解决?...注意,即便我们在定义模板参数时使用typename定义,也会报错: 解决办法 在搞清楚了编译器为何会报错之后,我们的解决方法也非常简单: 正确做法是在container::const_iterator...前面加上typename,直接告诉编译器这就是一个类型,在后面等模板实例化之后再去找,不要直接报语法错误: typename Container::const_iterator it = v.begin...就不会在语法阶段报错: auto it = v.begin(); 但是auto也不是万能的,如下面这种类模板的声明的时候就不能用auto反推: 我们在定义模板参数时使用typename...定义,遇到这种报错解决方法也同上,加上typename或者换成auto就行: 结语 希望这篇关于 解决"类型 从属名称的使用必须以“typename”为前缀"问题 的博客能对大家有所帮助,欢迎大佬们留言或私信与我交流

    8910

    【C++】泛型编程 ⑥ ( 类模板 | 类模板语法 | 代码示例 )

    避免重复编写 相同或类似的代码 ; 类模板 常用于 表示 数组 , 线性表 , 树 , 图 等 数据结构 ; 这些数据结构的 节点数据类型 可以使用 类模板 , 同一个数据结构可以存储不同类型的数据 ; linux...泛型类型 组成 , 多个之间使用逗号隔开 ; typename 泛型类型, typename 泛型类型2, ... , typename 泛型类型n 泛型类型 使用 大写字母表示 , 一般是 T ;...定义一个泛型 : 在尖括号中只 声明 一个泛型 ; template 定义多个泛型 : 再见括号中 声明 多个泛型 , 泛型之间 使用 逗号隔开 ; template 类模板示例 : 在下面的 示例 中 , MyClass 是一个类模板 , 在该 类模板 张红使用一个 泛型参数 T 来定义 成员变量 ; template... class MyClass { public: T value; MyClass(T val) : value(val) {} void

    21640

    从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename

    答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: template > class... T, typename CONT = deque > class Stack { public:     Stack() : c_()     {     }     ~Stack()     ...可以用成员模板的方法解决: #include  using namespace std; template  class MyClass { private...: #include  using namespace std; template  class MyClass { private:     typename... T::SubType *ptr_; 如果前面没有typename 修饰,则SubType会被认为是T类型内部的静态数据成员,推导下去,* 就不再认为是指针,而被 认为是乘号,编译的时候就出错了。

    1.4K00
    领券