语法: (其中typename可以使用class代替)
template <typename 类型名称1, typename 类型名称2[, ...]> 返回值类型 函数名(形式参数){ //TODO, 可以使用类型参数 }
举例
#include <iostream> template <typename T> void Swap0(T *x, T *y){ //使用指针为参数 T tmp; tmp = *x; // *x表示对指针解引用 *x = *y; *y = tmp; } template <typename T> void Swap1(T &x, T &y){ //使用引用为参数 T tmp; tmp = x; //x是对参数的引用 x = y; y = tmp; } int main(){ int a0=5, b0=6; Swap0(&a0, &b0); // 传地址(指针)给函数 std::cout << "a0=" << a0 << ", b0=" << b0 << std::endl; float a1=5.1, b1=6.1; Swap1(a1, b1); //传实际的变量给函数 std::cout << "a1=" << a1 << ", b1=" << b1 << std::endl; }
语法:
template <typename 类型名称1, typename 类型名称2[, ...]> class 类名{ //TODO; };
举例
#include <iostream> template <typename T0, typename T1> //定义类模板 class Point{ public: Point(T0 x, T1 y); T0 getx() const; T1 gety() const; void setx(T0 x); void sety(T1 y); void show() const; private: T0 m_x; T1 m_y; }; //类实现时, 需要带上模板头, 类名后面也要带上类型参数; template <typename T0, typename T1> Point<T0, T1>::Point(T0 x, T1 y): m_x(x), m_y(y){} template <typename T0, typename T1> T0 Point<T0, T1>::getx() const {return m_x;} template <typename T0, typename T1> T1 Point<T0, T1>::gety() const {return m_y;} template <typename T0, typename T1> void Point<T0, T1>::setx(T0 x){ m_x=x; } template <typename T0, typename T1> void Point<T0, T1>::sety(T1 y){ m_y=y; } template <typename T0, typename T1> void Point<T0, T1>::show() const { std::cout << "(" << m_x << ", " << m_y << ")" << std::endl; } int main(){ Point<int, int> p0(1, 2); //创建对象时, 需要指明参数的具体类型; p0.show(); }