1. 程式人生 > >C++_模板函式

C++_模板函式

參考以下大佬部落格:

參考1
參考2
參考3
參考4
參考5

我們為什麼需要模板?

   同樣的函式,我們要為不同的引數型別寫不同的版本,程式的邏輯是一模一樣的,只是他們的型別是不一樣的。

如下:

void Swap(int & x, int & y)
{
    int tmp = x;
    x = y;
    y = tmp;
}
void Swap (double & xr double & y)
{
    double tmp = x;
    x = y;
    y = tmp;
}

我們可以為上面的兩個的函式寫一個模板函式,如下:

template<typename T>  // 定義了抽象的資料型別 T
void Swap(T &x,T &y)
{
   T tmp=x;
   x=y;
   y=tmp
}

或者,把關鍵字typename 替換成 class

template <class T>
void Swap(T & x, T & y)
{
    T tmp = x;
    x = y;
    y = tmp;
}
模板函式被呼叫時,編譯器會根據傳入形參的不同,推導T變成對應的資料型別。

在類中寫一個方法時,我們同樣可以使用模板函式

如下:

class SwapTest{
  public:
	template<typename T>
	void print(const T& t) {
		std::cout << t << std::endl;
	}
}

SwampTest *p = new SwampTest();
p->print("123");