C++中的 template(模板) ----泛型编程,类型封装成变量

一个程序如果定义的类型是int类型,那么怎么样处理double类型的数据呢?我们传统的是将所有的 int 类型全部改成 double 类型 ,小程序这样改无疑是不错的选择,就算要改成char, string 等其他类型也不会消耗太多的资源。但是,如果是一个大型的程序呢?这样依靠手动修改类型是不是不合适?C++的 template 给我们提供了解决方案。
template也叫模板,是泛型编程。泛型编程含义如下:
泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器库。所谓通用的标准容器库,就是要能够做到,比如用一个List类存放所有可能类型的对象这样的事;泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型即是指具有在多种数据类型上皆可操作的含义,与模板有些相似。STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。
-----摘自百度百科
了解即可。
分为函数模板、类模板
函数模板格式如下:

template <typename type> 
ret-type func-name(parameter list)
{
   // 函数的主体
}

类模板格式如下:

template <class type> 
class class-name {
.
.
.
}

它的使用格式:template <class 自定义类型名称>
比如要把类型当做变量,可:template ,要在每一个接口(或者叫方法、函数)前面一行 写上 template ,接口中,类名后面要写上,如:

template <class DataType>
CDArray<DataType>::CDArray(int nSize, DataType dValue)
{
	m_pData = new DataType[nSize];
	for(int i=0; i<nSize; i++)
	{
		m_pData[i] = dValue;
	}
	m_nSize = nSize;
	m_nMax=nSize;
}

不太明白的有地方,就是输出函数中要根据定义来进行判断类型,进行选择如下:

template <class DataType>
int CDArray<DataType>::Display()
{
	//输出函数
	if(m_nSize==0) 
		return FALSE;

	if( m_pData == NULL )
		return FALSE;

	for( int i=0; i<GetSize(); i++) 
	{
		char const *typen = typeid( DataType ).name();
		if( !strcmp( typen, "double" ) )
			printf(" type: %lf ", m_pData[i] );
		else if( !strcmp( typen, "int" ) )
			printf(" type: %d ", m_pData[i] );

		printf("\n");
	}

	return TRUE;
}

这个程序的测试如下:


#include <stdio.h>

#include "Array0.h"

void main()
{
	// test double array
	CDArray<double> pa;

	//pa.InitArray( );

	pa.SetSize(  3 );
	pa.SetAt(  0, 1.0 );
	pa.SetAt(  1, 2.0 );
	pa.SetAt(  2, 3.0 );

	pa.Display( );

	//pa.FreeArray( );



	// test int array
	CDArray<int> pb;

	//pb.InitArray( );

	pb.SetSize(  3 );
	pb.SetAt(  0, 10 );
	pb.SetAt(  1, 11 );
	pb.SetAt(  2, 12 );

	pb.Display( );

	//pb.FreeArray( );
}

运行结果如下:
在这里插入图片描述
个人学习所得,如有错误或者高见,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jasscical

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值