C++模板编程 - 第五章 技巧性基础知识

Keyword Typename

1 template<typename T>
2 class SomeClass
3 {
4     typename T::subtype * ptr;
5 };

如果没有typename,T::subtype会被认为是一个静态成员。

A practical example:

 1 // print elements in a STL container
 2 template<typename T>
 3 void print(T const & con)
 4 {
 5     typename T::const_iterator pos;
 6     typename T::const_iterator end(con.end());
 7
 8     for(pos=con.begin(); pos!=end; pos++)
 9         ....
10 }

如果身处于模板之中,想要调用另外一个模板函数,可能需要用到.template

1 template<int N>
2 void printBitset(std::bitset<N> const & bs)
3 {
4     std::cout<<bs.template to_string<char, char_traits<char>, allocator<char> >();  // here we are inside a template and calling a template function
5 }

在5.2节,书上的说法和我的运行结果出现了分歧,我的运行环境是vs2013。

 1 #include<iostream>
 2
 3 using namespace std;
 4
 5 void foo()
 6 {
 7     cout << "global foo" << endl;
 8 }
 9
10 template<typename T>
11 class Base{
12 public:
13     void foo()
14     {
15         cout << "foo in Base" << endl;
16     }
17 };
18
19 template<typename T>
20 class Derived1 :Base < T >
21 {
22 public:
23     void goo()
24     {
25         foo();            // foo in Base
26         Base<T>::foo();    // foo in Base
27         ::foo();        // global foo
28     }
29 };
30
31 int main()
32 {
33     Derived1<int> d1;
34     d1.goo();
35     return 0;
36 }

书上的说法是goo中第一个foo调用实际调用的并不是Base中的foo,然而我的运行结果把书上写的否定了。所以说这个事情可能是和编译环境有关系。为了避免不确定性,还是加上Base<T>::前缀,或者使用this指针比较保险,能够避免不确定性。

changlog:

2015/6/18 要滚去看数理方程了,先写这么多。

时间: 2024-10-29 03:11:17

C++模板编程 - 第五章 技巧性基础知识的相关文章

软考考前冲刺第五章数据库系统基础知识

1.E-R模型向关系模型转换时,三个实体之间多对多的联系m:n:p应该转换为一个独立的关系模式,且该关系模式的关键字由三个实体的关键字组成. 在E-R模型向关系模型转换时,如果是多对多的联系,那么这个联系需要转换为一个独立的关系模式,且该关系模式的属性由各实体的关键字和该联系自身的属性组成,而该关系模式的关键字(主键)由各实体的关键字组成. 2.CD 投影运算是从一个关系里面抽取指明的属性(列)组成一个新的关系,这种运算是一种对列进行操作的运算.本题中∏1.3(R)的含义就是从关系R中,选取第一

[python核心编程] 第五章练习题

第五章 数字 5-2. 操作符,写一个函数,计算并返回两个数的乘积“整理的时候才看到我把题目看成两个数的和了” 5-3. 标准类型操作符.写一段脚本,输入一个测验成绩,根据下面的标准,输出他的评分成绩(A-F) A:90~100 B:80~89 C:70~79 D:60~69 F:<60 5-4. 取余.判断给定年份是否是闰年.使用下面的公式. 一个闰年后就是指他可以被4整除,但不能被100整除,或者它可以被400整除. [python核心编程] 第五章练习题,布布扣,bubuko.com

Python核心编程第五章习题

Python核心编程-第五章-习题 5.1  整形,讲讲Python普通整形与长整形的区别? Python的标准整形类型是最通用的数字类型.在大多数32位机器上,标准整形类型的取值范围是-2**32-2**32 - 1. Python的长整型类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关,换句话说,Python能轻松表达很大的整数. 长整型类型是标准整形类型的超集,当程序需要使用比标准整形更大的整型时,可以使用长整型类型,在整型值后面添加L,表示这个为长整型,3.0版本已经统一称为为整

第一章 计算机基础知识

第一章 计算机基础知识 第一部分 概述 1.1946年2月15日,第一台计算机 ENIAC 2.物理原件(电子原件) 第一代:电子管.第二代:晶体管.第三代:中小规模集成电路.第四代:超大规模集成电路.第五代:超导材料.第六代:人工智能.#考试考到第四代. 3.计算机的分类 巨型机,大型机,中型机,小型机,微型机 现在的巨型机也是存在的 4.微处理器(CPU.中央处理器)由控制器.寄存器.运算器组成 第二部分 微机系统的组成 CPU>内存>外存 #速度 CPU和内存之间有一个CACHE,叫做高

【安富莱二代示波器教程】第1章 示波器基础知识

第1章   示波器基础知识 本章的内容整理自网络,主要讲解示波器的基础知识.如果初学的话非常有必要对这部分知识有一个了解.因为示波器是硬件调试必不可少的设备. 1.1 什么是示波器 1.2 示波器的发展史 1.3 示波器的基础概念 1.4 触发系统 1.5 李沙育图形 1.6 窗函数选择 1.7 总结 1.1  什么是示波器 示波器是形象地显示信号幅度随时间变化的波形显示仪器,是一种综合的信号特性测试仪,是电子测量仪器的基本种类. 自然界运行着各种形式的正弦波,比如海浪.地震.声波.爆破.空气中

编程入门:C语言基础知识全网超全不用到处找了!(文末附清单)

你背或者不背,干货就在那里,不悲不喜 你学或者不学,编程就在那里,不来不去 听到这话的你是否略感扎心? 编程入门:C语言基础知识全网超全不用到处找了!(文末附清单)01基础知识 计算机系统的主要技术指标与系统配置. 计算机系统.硬件.软件及其相互关系. 微机硬件系统的基本组成. 包括:中央处理器(运算器与控制器),内存储器(RAM与ROM),外存储器(硬盘.软盘与光盘),输入设备(键盘与鼠标)输出设备(显示器与打印机).如果大家如果在自学遇到困难,想找一个C++的学习环境,可以加入我们的C++学

Android 并发编程:(一)基础知识 —— 架构和组件

本章节所有内容皆为原创,如需转载,请注明出处. http://blog.csdn.net/manoel/article/details/38462631 写在前面的话 很久没写博客了,一是因为自身水平有限,怕误人子弟:二是因为感觉没什么可写的:三是因为时间有限,要寻找工作.学习和生活之间的平衡. 最近一直在研究和梳理Android多线程编程的东西,希望能够把这些分享给大家. 想必做过Android应用开发的同学应该都会知道,多线程是一个特别"诡异"的地方.之所以称为"诡异&q

APUE学习笔记:第一章 UNUX基础知识

1.2 UNIX体系结构 从严格意义上,可将操作系统定义为一种软件(内核),它控制计算机硬件资源,提供程序运行环境.内核的接口被称为系统调用.公用函数库构建在系统调用接口之上,应用软件即可使用公用函数库,也可使用系统调用.shell是一种特殊的应用程序,它为运行其他应用程序提供了一个接口 从广义上,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并给予计算机以独有的特性(软件包括系统实用程序,应用软件,shell以及公用函数库等) 1.3  shell shell是一个命令行解

编程中无法回避的基础知识---事务

编程中无法回避的基础知识---事务 进行软件开发已经有一段时间了,有些东西虽然一直在用但是并不是很理解为什么去用它,它的机制又是什么,是不是还有其他的用途?就像我们在对数据库进行一系列操作时,我们为了保证数据的一致性往往会用到事务.本文将简单的介绍一下事务的相关知识,和简单用法. 基本概念 定义 事务是将一系列 数据源更新分组或分批的方法,以便在回滚事务时同时提交所有事务或者不提交任何事务[MSDN]. 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit