c++中函数模板的使用

在程序设计中,经常要使用到函数体相同的函数,如果我们要根据所使用的参数表不同来决定调用具体哪个函数时,我们经常使用的方式是进行函数重载,但是当我们的函数很多的时候会发现实现起来很不方便。所以c++提供了函数模板的概念,这和类模板实现起来的方式是类似的。

下面举个例子,我们经常要使用的冒泡排序算法,被排序的对象可能是double,int,char,float等等,下面是实现代码:

template <typename T1,typename T2>
void bubble(T1 *A, T2 len)
{
	T1 temp;
	for(int i=0;i<len;i++)
	{
		for(int j=i;j<len;j++)
		{
			if(A[i]>A[j])
			{
				temp=A[i];
				A[i]=A[j];
				A[j]=temp;
			}
		}
	}
}

这样我们就可以根据被排序对象的类型进行具体函数调用了。

时间: 2024-10-23 03:02:38

c++中函数模板的使用的相关文章

C++中函数模板,显式具体化,显式实例化:

函数模板 形如: template<typename T>  //没有分号 void func(T &a,T &b); 称为函数模板,其中,template和typename为关键字,typename可以用class来替代.T(可以用其他的名称)表示一种泛型,既可以表示int型,也可以表示double或其他类型,将它想象成C++里面的数据类型的集合. 也就是说: void func(T &a,T &b)= void func(int &a,int &am

C++中函数模板template和函数参数为指针,且有返回值的结合使用

1 #include<iostream> 2 using namespace std; 3 // 利用模板函数计算一个表达式 4 template<class Type> 5 Type Abc(Type a,Type b,Type c) 6 { 7 return a+b+c; 8 } 9 // 利用引用参数指针计算一个表达式 10 template<class Type> 11 Type ABC(Type *a,Type *b,Type *c) 12 { 13 retu

C++中函数模板template的使用

下面以一个简单程序演示一下函数模板的使用: 1 #include<iostream> 2 using namespace std; 3 template<class Type> 4 Type Abc(Type a,Type b,Type c) 5 { 6 return a+b+c; 7 } 8 int main() 9 { 10 int a=1,b=2,c=3; 11 cout<<"a= "<<a<<",b= &qu

实验2:函数重载、函数模板、简单类的定义和实现

实验目的 1. 掌握c++中函数的声明.定义.调用和参数传递方式 2. 掌握c++中带有默认形参值的函数声明和定义方法 3. 理解函数重载,掌握c++中函数重载的实现方式 4. 理解函数模板,掌握c++中函数模板的简单使用 5. 理解面向对象的抽象和封装,掌握c++中类的定义.实现和使用方法 实验准备 1. 函数的声明.定义.调用.参数传递方法 2. 带有默认形参值的函数 3. 函数重载 4. 函数模板(9.1.1节 + 9.3节) 其中,9.3节,理解3个常用的排序算法和两个常用的查找算法 5

动态链接库中导出模板函数

动态链接库中导出模板函数 C++ 支持函数模板,利用函数模板,可以简化我们的程序代码.我在自己的代码中也经常用到函数模板,但是以前一直以为函数模板是要放到头文件中的,否则调用模板函数时,编译器会找不到函数模板的定义.今天闲暇,又翻了翻 C++ Primer,发现我以前的理解是有问题的.模板函数也可以像普通函数那样,将声明放在头文件中,定义放在.cpp 中.这时又想到另一个问题,DLL 中是否可以导出模板函数呢.如果可以的话,就可以将函数的实现代码真正隐藏起来了.经过一番实验,发现是可以的,但是有

函数模板在c++动态顺序表中的大作用

函数模板提供了一种机制通过它我们可以保留函数定义和函数调用的语义在一个程序位置上封装了一段代码确保在函数调用之前实参只被计算一次. 函数模板提供一个种用来自动生成各种类型函数实例的算法程序员对于函数接口参数和返回类型中的全部或者部分类型进行参数化(parameterize)而函数体保持不变. 函数模板使用注意事项: 1.每个函数模板前边都需要添加模板声明例如:template<typename T> 2.在模板类的使用时,注意其类型改变,例如: template<typename T&g

求变量的数据类型,typeid,bool,C和C++的不同,new和delete,C++中的枚举,inline和可变参数模板,auto和函数模板,宽字符

求变量的数据类型,通过函数typeid(变量名).name();获得变量的数据类型. 案例如下: #include <iostream> #include <stdlib.h> void main() { double db = 10.9; double *pdb = &db; auto num = pdb; //通过typeid的方式获得数据类型 std::cout << typeid(db).name() << std::endl; std::c

c++ 中的函数模板

#include <iostream> using namespace std; template <typename T> void fun(T a) { cout << "void fun(T1 a)" << endl; } template <typename T1, typename T2> void fun(T1 a, T2 b) { cout << "void fun(T1 a, T2 b)&

C++函数模板

C++函数模板允许以任意类型的方式来定义函数.例如,可以这样建立一个交换模板: template <typename AnyType> void Swap(AnyType &a, AnyType &b) { AnyType temp; temp = a; a = b; b = temp; } 在标准C++98添加关键字typename之前,C++使用关键字class来创建模板.也就是说,可以这样编写模板定义: template <class AnyType> voi