`

c++模板(类型依赖)说明例子

    博客分类:
  • c++
 
阅读更多

#include <iostream>
#include <list>
template <typename T>
class CCustomerList
{
public:
	void push(T item)
	{
		m_customer.push_back(item);
	}
	void show_item()
	{
		CCIterator it = m_customer.begin();
		while(it != m_customer.end())
		{
			std::cout<<(*it)<<std::endl;
			++it;
		}
	}
private:
	typedef std::list<T> CustomerContainer;
	typedef typename CustomerContainer::iterator CCIterator;
	CustomerContainer m_customer;
};
int main(int argc, char *argv[])
{
	CCustomerList<int> c;
	for(int i=0; i<10; ++i) c.push(i);
	c.show_item();
	return 0;
}
 这里说的是CCustomerList里的

typedef typename CustomerContainer::iterator CCIterator;

语句。
在这条语句中必须加上typename关键字,不然编译时会报错。
根据《effective STL》里的解释: CustomerContainer::iterator 是一个依赖形式类型参数T的一种类型,所以必须在它前面放上typename这个词。
template关键字还可以用在中间:
Template names can not only occur after a :: but also after a -> or . in a class member access. You need to insert the keyword there too.
如:Protocol_v2<alloc_t> * pack = alloc->template malloc<Protocol_v2<alloc_t> >();

更多内容见:
分享到:
评论

相关推荐

    C++模板全览

    在模板实例化过程中,编译器需要解决模板依赖性问题,即某些类型或表达式的解析依赖于模板参数。例如,模板成员函数的返回类型可能依赖于模板参数。 九、模板的重载 模板函数和非模板函数可以相互重载,编译器会...

    c++模板类实现快速排序

    以下是一个简单的C++模板类实现快速排序的示例: ```cpp template void quickSort(T arr[], int left, int right) { if (left ) { int pivotIndex = partition(arr, left, right); quickSort(arr, left, pivot...

    c++模板学习记录(自己)

    C++模板是编程中强大的工具,它允许程序员创建泛型代码,从而实现代码复用,减少重复编写相同逻辑但处理不同数据类型的情况。本篇主要介绍C++模板的基础知识,包括模板定义、模板实例化以及模板参数推演。 1. 模板...

    C++入门学习——模板示例代码

    本篇文章将深入探讨C++模板的基本概念、类型和函数模板,以及模板特化和元编程等高级主题。 首先,我们要理解C++中的模板分为两种:类型模板和函数模板。类型模板主要用于定义泛型类,而函数模板则用于创建泛型函数...

    c++游戏程序设计例子

    在C++游戏程序设计领域,开发者利用C++的强大特性和高效性能来构建各种类型的游戏,从小型的桌面游戏到大型的3D网络游戏。C++语言以其面向对象的特性、丰富的库支持以及对底层硬件的直接访问,使得它成为游戏开发的...

    C++模板资源

    C++模板是C++编程语言中的一个重要特性,它允许程序员创建通用代码,这些代码可以用于处理不同类型的数据。模板是C++中的元编程工具,通过模板,我们能够编写出高效的、可重用的代码,而无需为每种数据类型都复制一...

    阅读材料-C++ 模板中的typename、class关键字.rar_C++ typename_class

    在C++编程语言中,模板(Template)是一种强大的工具,用于实现泛型编程,它允许我们编写可重用且类型安全的代码。在定义模板时,我们常常会遇到`typename`和`class`这两个关键字,它们在模板声明中扮演着重要的角色...

    学习C++中模板及详解

    C++中的模板是一种强大的工具,它允许程序员创建通用的代码,可以应用于多种数据类型,从而减少代码的重复性,提高程序的效率和可维护性。模板主要有两种形式:函数模板和类模板。 **函数模板** 函数模板是C++中...

    程序员C++提高编程PDF.pdf

    自动类型推导依赖于编译器来自动识别传入的参数类型,而显示指定类型则是程序员明确告知编译器使用哪种数据类型来替代模板参数。在使用模板时,必须保证传入的参数类型能够被正确推导或者明确指定,否则会导致编译...

    C++ PPT第8章 模板.ppt

    总之,C++模板是面向对象编程的重要组成部分,它通过参数化多态性提供了强大的代码复用机制,简化了程序设计并提高了代码的可读性和可维护性。熟练掌握模板的使用对于任何C++开发者来说都是至关重要的。

    C++单元测试简单示例

    本示例主要聚焦于C++编程语言中的单元测试,我们将探讨如何进行白盒测试的基本实现方法和结构。 首先,我们需要理解什么是单元测试。单元测试是对软件中的最小可测试单元进行检查和验证的过程。对于C++,这可能是一...

    c++ 类模板、类函数

    类模板是C++中一个非常重要的概念,它允许类的定义依赖于模板参数,从而创建出依赖于具体类型的类实例。类模板的基本语法如下: ```cpp template class ClassName { // 成员变量和函数可以使用类型T }; ``` 其中`...

    c++所有常用设计模式例子代码Source.zip

    "c++所有常用设计模式例子代码Source.zip"这个压缩包包含了C++实现的各种设计模式的实例代码,对于学习和理解设计模式有着极大的帮助。 设计模式通常分为三大类:创建型、结构型和行为型。下面,我们将详细讨论这些...

    Makefile标准模板,清晰明了,支持c和c++混合编程

    通常,C++编译器`g++`能够处理这两种类型的源文件,因为C是C++的子集,所以C代码可以在C++环境中编译。 一个基本的`Makefile`模板可能包括以下部分: 1. **目标和依赖**: 目标通常是可执行文件,依赖于源文件。...

    c++ 新思维.pdf

    这本书详细介绍了现代C++设计的概念,包括泛型编程和设计模式的应用,以及C++模板的高级使用技巧。Andrei Alexandrescu是C++社区著名的开发者和作者,他的书籍对于深入理解C++模板的机制和最佳实践有着重要的指导...

    C++f 泛型编程应用实例

    C++泛型编程是C++语言中的一个重要特性,它允许开发者编写不依赖特定类型而具有通用性的代码。这种编程范式极大地提高了代码的重用性和灵活性,降低了维护成本。本篇将深入探讨C++泛型编程的应用实例,帮助初学者...

    C++设计模式和部分例子

    C++设计模式是一种在软件开发过程中,为了应对特定问题或挑战而形成的可重用解决方案的模板。这些模式是经过时间考验、广泛接受的最佳实践,它们为程序员提供了一种通用语言,使得团队之间的沟通更为有效。设计模式...

    C++ Templates 完全导引

    模板的依赖性问题也是C++模板编程的一大挑战。当模板的实例化依赖于其他模板的实例化时,可能会出现二义性或循环依赖。解决这些问题通常需要合理地组织代码,或者使用`extern template`声明和`explicit ...

Global site tag (gtag.js) - Google Analytics