C++模板类

Posted by 川川的博客 on April 21, 2025

函数模板

写跟类型无关的代码(泛型编程)

 //template<typename T>
 template<class T>
 void Swap( T& left,  T& right)
 {
     T temp = left;
     left = right;
     right = temp;
 }
 
 

1.模板实例化

image-20250526234956859

2.模板应用

C++引入模板的作用

image-20250527000043016

3.函数模板实例化

template<class T>
 T Add(const T& left, const T& right)
 {
    return left + right;
 }
 
int main()
 {
    int a1 = 10, a2 = 20;
    double d1 = 10.0, d2 = 20.0;
    Add(a1, a2);
    Add(d1, d2);
    
    /*
     Add(a1, d1);
     该语句不能通过编译,因为在编译期间,当编译器看到该实例化时,需要推演其实参类型
     通过实参a1将T推演为int,通过实参d1将T推演为double类型,但模板参数列表中只有一个T,
     编译器无法确定此处到底该将T确定为int 或者 double类型而报错
    注意:在模板中,编译器一般不会进行类型转换操作,因为一旦转化出问题,编译器就需要背黑锅
    
    */
    
    // 此时有两种处理方式:1. 用户自己来强制转化 2. 使用显式实例化
    Add(a1, (int)d1);
    // 显式实例化
    Add<int>(a2, d2);
    
    return 0;
 }

4.vector实现

void push_back(T& x);

void pop_back();