C++学习——模板

1.C++模板

模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。
模板是创建泛型类或函数的蓝图或公式。
库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。
每个容器都有一个单一的定义,
比如 向量,我们可以定义许多不同类型的向量,比如 vector <int> 或 vector <string>
#include <stdio.h>
#include<iostream>
using namespace std;

template <typename T1,typename T2>
void print(T1 value1,T2 value2){
    cout << "value=" << value1+value2 << endl;
}

template <class T1,int SIZE>
class solution {
public:
    void print(T1 value) {
        cout << "value=" << value << endl;
    }
    void set(int i, int value) {
        if (i >= SIZE) {
            cout << "error" << endl;
        }
        else {
            array[i] = value;
        }
    }
    void print_array() {
        for (int i = 0; i < SIZE; i++) {
            cout << array[i] << " ";
        }
        cout << endl;
    }
private:
    int array[SIZE];
};
int main()
{
    print(23,23.23);
    print(23.67, 9);
    solution<double,5> s;
    s.set(0, 7);
    s.set(1, 2);
    s.set(2, 5);
    s.set(3, 19);
    s.set(4, 67);
    s.print_array();
    return 0;
}

2.C++模板是什么,底层怎么实现的?

编译器并不是把函数模板处理成能够处理任意类的函数;
编译器从函数模板通过具体类型产生不同的函数;
编译器会对函数模板进行两次编译:
在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译。
 这是因为函数模板要被实例化后才能成为真正的函数,
 在使用函数模板的源文件中包含函数模板的头文件,
 如果该头文件中只有声明,没有定义,那编译器无法实例化该模板,最终导致链接错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值