typename
typename关键字是C++在标准化过程中被引入的,目的在于向编译器说明template内的某个标识符是个类型。
如:template <typename T>
class MyClass
{
typename T::SubType *ptr;
...
}
在这里,第二个typename关键字的意思是:SubType是class T内部定义的一个类型,从而ptr是一个指向T::SubType类型的指针
如果没有关键字typename,SubType会被认为是class T的一个static成员,于是被编译器理解为一个变量,从而
T::SubType *ptr;所表达的意思是:class T的static成员SubType和ptr相乘。
2、通常如果某个与模板参数相关的名称是个类型时,你就必须加上关键字typename。
3..template构建
在如下例子中:
template<int N>
void printBitset(std::bitset<N> const &bs)
{
std::cout<<bs.template to_string< char ,char_traits<char>, allocator<char> >();
}
如果没有.template,则编译器会无法得知to_string后的'<'是模板参数的开始符号,错误的人为是一个小于符号。
.template或者->template只有在template内才能被使用。
typename的更多相关文章
- C++箴言:理解typename的两个含义
C++箴言:理解typename的两个含义 问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同? template<class ...
- C++中typename和class的区别
C++中typename和class的区别 在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 相信学习C++的人对c ...
- C++中typename关键字的用法
我在我的 薛途的博客 上发表了新的文章,欢迎各位批评指正. C++中typename关键字的用法
- C++ 中 typename
声明template参数时, 前缀关键字class和typename可以互换; 使用关键字typename标识嵌套从属类型名称, 但不需在基类列表和成员初始化列表内使用. 从属名称(dependent ...
- Effective C++ -----条款42:了解typename的双重意义
声明template参数时,前缀关键字class和typename可互换. 请使用关键字typename标识嵌套从属类型名称:但不得在base class lists(基类列)或member init ...
- c++中typename和class的区别介绍
"typename"是一个C++程序设计语言中的关键字.相当用于泛型编程时是另一术语"class"的同义词.这个关键字用于指出模板声明(或定义)中的非独立名称( ...
- [Z] 关于c++ typename的另一种用法
在看c++ primer的时候见到了一下这种用法: typedef typename std::vector<int>::size_type size_type; 觉得这里面的typena ...
- 读书笔记_Effective_C++_条款四十二:了解typename的双重意义
顾名思义,typename有双重含意.只要你用过template,那么第一重含意一定知道,那就是声明模板的时候,我们既可以这样写: template <class T> 也可以这样写 te ...
- [Reprint]c++中typename和class的区别介绍
在c++Template中,很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 相信学习C++的人对class这个关键字都非常明白,clas ...
随机推荐
- Maven安装与配置
下载: 1.从官网http://maven.apache.org中下载,下载下来的是一个压缩包,解压即可.因为Maven本身也是用Java实现的.2.Maven的目录结构 /bin; maven的 ...
- WCF服务一:WCF服务简介
一.回顾开发历史: 软件架构的设计经历了:从面向对象程序,到面向组件程序设计,再到面向服务程序设计.这三种方式都致力于同一个目标:封装和重用. 面向对象程序设计:类封装功能并提供代码重用. 面向组件程 ...
- webservice 接口通过 HTTP 获取数据
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Ne ...
- 处理sevenzipsharp 检查密码函数的Bug
using (SevenZipExtractor extr = new SevenZipExtractor(tbPackagePath.Text, "www.pc6.com")) ...
- javax/javaee-api/ Maven依赖
<dependency> <groupId>javax</groupId> <artifactId>javaee-api</artif ...
- python 循环嵌套
需求如下: 1. #定义商品列表类 # def shangpin_list(): # for i in com_list: # print(com_list.index(i),end=" & ...
- jquery获取所有被选中checkbox
想要得到所有被选中的checkbox的value ,并且传给后台 var headers = ""; $('input[name="header"]:check ...
- linux操作系统-脚本入门
背景:在使用linux时,经常会写一些linux命令片段,比较麻烦,有经验的程序员会把 这些碎片式的命令写成shell脚本 1.重启tomcat脚本 #!/bin/sh #kill tomcat pi ...
- VS2012开发工具BUG
发现VS2012开发工具 新建立项目名称长度限制的一个bug, 向导方式名称长度限制56个,但建立好的项目名称长度是可以改的很长很长. 也有想是不是生成程序集的名称会有限制,同样这里生成程序集名称,及 ...
- 金蝶 K/3 Cloud 服务端控件编程模型
如下图是服务端已有的控件编程模型