码迷,mamicode.com
首页 > 其他好文 > 详细

为什么会有函数模版

时间:2015-07-03 00:13:38      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:函数模版   c++   

demo 1

// 函数的业务逻辑 一样 
// 函数的参数类型 不一样
void myswap01(int &a, int &b)
{
	int c = 0;
	c = a;
	a = b;
	b = c;
}

void myswap02(char &a, char &b)
{
	char c = 0;
	c = a;
	a = b;
	b = c;
}

void main()
{
	{
		int x = 10; 
		int y = 20;

		myswap01(x, y);
		printf("x:%d y:%d \n", x, y);

	}

	{
		char a = 'a'; 
		char b = 'b';

		myswap02(a, b);
		printf("a:%c b:%c \n", a, b);
	}
	

	cout<<"hello..."<<endl;
	system("pause");
	return ;
}

看到demo 1中的两个函数,他们的逻辑都是一样的,只是参数类型不一样,当然,你可以写函数重载,但还是需要写两个函数,况且函数重载不应该在这种情况下使用。

有了需求,就有了生成,出现了函数模版:

demo 2

//让 类型参数化 ===, 方便程序员进行编码
// 泛型编程 
//template 告诉C++编译器 我要开始泛型编程了 .看到T, 不要随便报错
template <typename T>
void myswap(T &a, T &b)
{
	T c = 0;
	c = a;
	a = b;
	b = c;
	cout << "hello ....我是模板函数,欢迎 call 我" << endl;
}


//函数模板的调用
// 显示类型 调用
// 自动类型 推导
void main()
{
	{
		
		int x = 10; 
		int y = 20;

		myswap<int>(x, y); //1 函数模板 显示类型 调用

		myswap(x, y);  //2 自动类型 推导
		printf("x:%d y:%d \n", x, y);
	}

	
	{

		char a = 'a'; 
		char b = 'b';

		//myswap<char>(a, b); //1 函数模板 显示类型 调用

		myswap(a, b);
		printf("a:%c b:%c \n", a, b);
	}
}

此时一个函数定义就完成了,注意调用的时候显示调用使用比较多。


补充一个demo 3

#include <iostream>
using namespace std;

// 函数模板 本质 : 类型参数化  
//方便.....


//需要对字符数组  int数组进行排序

template <typename T,typename T2 >
int mySort(T *array, T2 size)
{
	T2 i, j ;
	T tmp;
	if (array == NULL)
	{
		return -1;
	}

	//选择  
	for (i=0; i<size; i++)
	{
		for (j=i+1; j<size; j++)
		{
			if (array[i] < array[j])
			{
				tmp = array[i];
				array[i] = array[j];
				array[j] = tmp;
			}
		}
	}
	return 0;
}

template <typename T, typename T2>
int myPrint(T *array, T2 size)
{
	T2 i = 0;
	for (i=0; i<size; i++)
	{
		cout << array[i] << " ";
	}
	return 0;
}

void main()
{
	// int类型
 	{
 		int myarray[] = {11, 33,44, 33,22, 2, 3, 6, 9};

 		int size =  sizeof(myarray)/sizeof(*myarray);
 		mySort<int, int> (myarray, size);
 
 		printf("排序之后\n");
 		myPrint(myarray, size);
 
 	}

	//char 类型
	{
		char buf[] = "aff32ff2232fffffdssss";
		int len = strlen(buf);

		mySort<char, int>(buf, len);
		myPrint<char , int>(buf, len);

	}

	cout<<"hello..."<<endl;
	system("pause");
	return ;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

为什么会有函数模版

标签:函数模版   c++   

原文地址:http://blog.csdn.net/zyq522376829/article/details/46733601

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!