1. 程式人生 > 實用技巧 >C++ template

C++ template

1 函式模板

#include <iostream>
using namespace std;

template <typename T>
T square(T a)
{
    return a * a;
}

int main(void)
{
    cout << square<int>(3) << endl;     // 可以顯式告訴編譯器是什麼型別,也可以讓編譯器推斷
    cout << square(3) << endl;
    cout << square<char>(9.3
) << endl; // 結果是Q ,81的ASCII碼 cout << square<int>(9.3) << endl; // 結果81 cout << square(5.5) << endl; // 30.25 編譯器自己推斷為double }

2 類模板

#include <iostream>
using namespace std;

template <typename T>
T square(T a)
{
    return a * a;
}

template 
<typename T> class win { private: T arr[10]; int size; public: win():size(0) {cout << "creater" << endl; } ~win(){}; int getSize()const{ return size; } T get(int i)const{ return arr[i];} void push(T x) { arr[size] = x; size++;} void print()const; }; template
<typename T> void win<T>::print()const{ for (int i = 0; i < size; i++) { cout << arr[i] << endl; } } template <typename T> win<T> operator*(const win<T> &left, const win<T> &right) { win<T> ret; for( int i = 0 ; i < right.getSize(); i++) { ret.push(left.get(i) * right.get(i)); } return ret; } int main(void) { win<int> a; a.push(1); a.push(2); a.push(3); a.push(4); a.push(5); a.push(6); a.print(); a = square(a); a.print(); }
a = square(a);這處會先呼叫函式模板然後由於定義了類win的乘法,呼叫operator *