函数模板 和 模板函数

有许多函数的功能相似,只是变量的类型不同,在语言中,处理这种问题,我们往往只能用void*来处理,但常常又会在数据转换时发生问题.在c++中函数模板就很好的替我们解决了这个问题.


template< typename T> 模板<未知变量类型 T>

#include <iostream>
#include <typeinfo>
#include <cstring>
using namespace std;

class A{};
/*
template<typename T>
void func(T t1){
    cout << "class" << endl;
}
*/
template<class T>   //在模板定义时 class和typename的作用相同.  typedef typename T::LengthType LengthType; 
                    // 这时,typename不能换成class,因为这是告诉编译器这是在声明一个变量
void func(T t1){
    cout << "class_1" << endl; 
}

template<typename T>
void func(void){
    T t;
    cout << "class_2" << endl;
}

template<typename T>
void swap1(T &t,T &t1){
   T mid = t;
    t = t1;
    t1 = mid;
}
/*
template<>// 这段代码有问题,没有油大佬能帮忙看看
void swap1<char*>(char * t,char * t1){
    char *p = new char[20];
    strcpy(p,t);
    strcpy(t,t1);
    strcpy(t1,p);
    delete[] p;
}
*/


int main(){
    func(5);
    func<A>(); //<>中只能传递类型,不能传递实例化的变量或者对象,即并不能传递<A()>
    cout << "---------------" << endl;
    int a = 4;
    int b = 6;
    swap1(a,b);
    cout << a << ":" << b << endl;
    cout<< "-----------------------" << endl;
    char a1 = 'a';
    char b1 = 'b';
    swap1(a1,b1);
    cout << a1 << ":" << b1 << endl;
    cout << "------------------------" << endl;
    string a2("asd");
    string b2("ASD");
    swap1(a2,b2);
    cout << a2 << ":" << b2 << endl;
    cout << "-----------------" << endl;
    
    char a3[20] ="dafa";
    char b3[20] ="ADA";
    swap1(a3,b3);
    cout << a3 << ":" << b3 << endl;
    
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值