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的更多相关文章

  1. C++箴言:理解typename的两个含义

    C++箴言:理解typename的两个含义 问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同? template<class ...

  2. C++中typename和class的区别

    C++中typename和class的区别 在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 相信学习C++的人对c ...

  3. C++中typename关键字的用法

    我在我的 薛途的博客 上发表了新的文章,欢迎各位批评指正. C++中typename关键字的用法

  4. C++ 中 typename

    声明template参数时, 前缀关键字class和typename可以互换; 使用关键字typename标识嵌套从属类型名称, 但不需在基类列表和成员初始化列表内使用. 从属名称(dependent ...

  5. Effective C++ -----条款42:了解typename的双重意义

    声明template参数时,前缀关键字class和typename可互换. 请使用关键字typename标识嵌套从属类型名称:但不得在base class lists(基类列)或member init ...

  6. c++中typename和class的区别介绍

    "typename"是一个C++程序设计语言中的关键字.相当用于泛型编程时是另一术语"class"的同义词.这个关键字用于指出模板声明(或定义)中的非独立名称( ...

  7. [Z] 关于c++ typename的另一种用法

    在看c++ primer的时候见到了一下这种用法: typedef typename std::vector<int>::size_type size_type; 觉得这里面的typena ...

  8. 读书笔记_Effective_C++_条款四十二:了解typename的双重意义

    顾名思义,typename有双重含意.只要你用过template,那么第一重含意一定知道,那就是声明模板的时候,我们既可以这样写: template <class T> 也可以这样写 te ...

  9. [Reprint]c++中typename和class的区别介绍

    在c++Template中,很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?   相信学习C++的人对class这个关键字都非常明白,clas ...

随机推荐

  1. Maven安装与配置

    下载: 1.从官网http://maven.apache.org中下载,下载下来的是一个压缩包,解压即可.因为Maven本身也是用Java实现的.2.Maven的目录结构   /bin; maven的 ...

  2. WCF服务一:WCF服务简介

    一.回顾开发历史: 软件架构的设计经历了:从面向对象程序,到面向组件程序设计,再到面向服务程序设计.这三种方式都致力于同一个目标:封装和重用. 面向对象程序设计:类封装功能并提供代码重用. 面向组件程 ...

  3. webservice 接口通过 HTTP 获取数据

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Ne ...

  4. 处理sevenzipsharp 检查密码函数的Bug

    using (SevenZipExtractor extr = new SevenZipExtractor(tbPackagePath.Text, "www.pc6.com")) ...

  5. javax/javaee-api/ Maven依赖

    <dependency>    <groupId>javax</groupId>    <artifactId>javaee-api</artif ...

  6. python 循环嵌套

    需求如下: 1. #定义商品列表类 # def shangpin_list(): # for i in com_list: # print(com_list.index(i),end=" & ...

  7. jquery获取所有被选中checkbox

    想要得到所有被选中的checkbox的value ,并且传给后台 var headers = ""; $('input[name="header"]:check ...

  8. linux操作系统-脚本入门

    背景:在使用linux时,经常会写一些linux命令片段,比较麻烦,有经验的程序员会把 这些碎片式的命令写成shell脚本 1.重启tomcat脚本 #!/bin/sh #kill tomcat pi ...

  9. VS2012开发工具BUG

    发现VS2012开发工具 新建立项目名称长度限制的一个bug, 向导方式名称长度限制56个,但建立好的项目名称长度是可以改的很长很长. 也有想是不是生成程序集的名称会有限制,同样这里生成程序集名称,及 ...

  10. 金蝶 K/3 Cloud 服务端控件编程模型

    如下图是服务端已有的控件编程模型