templateを使用することであらゆる型に対して適応することのできるコードを書くことができる.

関数テンプレート

template <typename T> void func(T a) {};

型推論で使用する場合

func(1);
func(2.5)

型指定して使用する場合

func<double>(2.5);

使用例

2点間の距離計算

// double l1=length<pcl::PointXYZ>(p_fl,p_fr);
// double l2=length<pcl::PointXYZ>(p_fr,R_xl.end_);
// double l3=length<pcl::PointXYZ>(R_xl.end_,L_xl.end_);
// double l4=length<pcl::PointXYZ>(L_xl.end_,p_fl);
// std::cout << l1 << " " << l2 << " " << l3 << " " << l4 << std::endl;
template <class POINT>
double length(const POINT &p0, const POINT &p1)
{
  return std::hypot(p0.x - p1.x, p0.y - p1.y);
}

クラステンプレート

template <typename T> class MyClass {};

型指定での使用.(型推論は不可能)

MyClass<int> myclass;

#include<iostream>
template <typename T> class TYPE
{
    private:
        T data;
    public:
        TYPE(){};
        TYPE(T val){this->data=val;};
        TYPE& operator = (T val){this->data=val;return *this;};
        TYPE& operator = (TYPE val){this->data=val;return *this;};
        operator T(){return data;};
        ~TYPE(){};
};
int main()
{
    TYPE<int> val=1;
    std::cout << val << std::endl; 
    return 0;

デフォルト引数

template <typename T = char> class MyClass;
template <typename A, typename B = A>
template <typename A, typename B = Array<A> >

参考文献