C++ 函数模板,意思就是提供一个通用的函数模板,供不同类型的地方使用,有函数模板和类模板:
一、template函数模板:
定义格式为:
template <typename/class T>
T test(T parm){ };
特点:
模板没有调用时,是不会被实例化的,如果有调用,编译器会生成对应的函数;
模板定义和实现要放在一个文件中,否则编译会链接出错或者直接把模板定义在头文件中;
#include <iostream>
template <typename/class T>
T add(T a, T b) {
return a + b;
}
int main()
{
std::cout << "Hello World!\n";
cout << add<int>(20, 30) << endl;
add<Point>(Point(10, 20), Point(30, 40));
return 0;
};
二、template类模板:
定义一个通用的Array 的数组类,可以自行的向定义的数组类中添加内容:
#include "template.h"
class Point {
private:
int m_x;
int m_y;
public:
Point(int x, int y) : m_x(x), m_y(y) {};
};
int main()
{
Array<int> array(3);
array.add(20);
array.add(30);
array.add(40);
//array.add(50);
cout << array.get(0) << endl;
Array<void *> array1;
array1.add(&Point(1, 2));
array1.add(&Point(1, 2));
return 0;
};
对应的类的实现:
//template.h
#pragma once
#include <iostream>
using namespace std;
//定义一个类Array的类
template <typename Item>
class Array {
public:
Item* m_Data;//指向内容数据
int m_size; //数组实际大小
int m_capacity;//数组容量
public:
Array(int capacity = 0);
~Array();
void add(Item value);
Item get(int index);
};
//在下面分别实现对应Array的方法
template <typename Item>
Array<Item>::Array(int capacity = 0) {
m_capacity = (capacity > 0) ? capacity : 10;
m_Data = new Item[m_capacity];
};
template <typename Item>
Array<Item>::~Array() {
if (m_Data == NULL) return;
delete[] m_Data;
};
template <typename Item>
void Array<Item>::add(Item value) {
if (m_size == m_capacity) {
cout << "空间不够" << endl;
//return;
}
m_Data[m_size++] = value;
};
template <typename Item>
Item Array<Item>::get(int index) {
if (index < 0 || index >= m_size) {
throw "数组越界";
}
return m_Data[index];
};
作者:frank_zyp
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文无所谓版权,欢迎转载。