一、C++模板簽名
template <typename T> void func(T arg);
C++模板簽名聲明以關鍵詞template開始,並且在尖括弧內指定用於參數的類型。在模板簽名中,T表示類型參數。模板參數可以為任意標識符,包括類名、類型別名和外部定義的變數名。使用類型參數可以使函數、類或者整個庫具有通用性,從而可以為不同類型的數據編寫通用演算法。
二、C++類模板
template <typename T> class myVec { private: T* ptr; int size; public: myVec(): ptr(nullptr), size(0) {} void push_back(T element) { T* newptr = new T[size + 1]; for(int i = 0; i < size; i++) { newptr[i] = ptr[i]; } newptr[size] = element; size++; delete[] ptr; ptr = newptr; } T& operator[](int index) { return ptr[index]; } int getSize() { return size; } };
C++類模板是一個通用類,可用於處理不同類型的數據。類模板聲明以關鍵詞template開始,後面跟著模板參數列表,然後是類聲明,其中使用模板參數。
三、C++模板函數
template <typename T> T myMax(T a, T b) { return a > b ? a : b; }
C++模板函數是一種通用函數,可用於處理不同類型的數據。函數模板聲明以關鍵字template開始,後面跟著模板參數列表,然後是函數聲明,其中使用模板參數。
四、C++模板元 怎樣判斷類型是函數
template <typename T> struct is_function { static const bool value = false; }; template <typename Return, typename... Args> struct is_function<Return(Args...)> { static const bool value = true; };
C++模板元編程是一種編譯期間計算的技術,它不同於常規的運行時編程。在這個小標題中,我們演示了如何使用模板元編程判斷一個類型是否為函數類型。在這個例子中,我們聲明了一個is_function結構體模板,第一個模板參數是待檢查類型T,它的默認值為false。第二個模板參數是一個函數類型的參數列表,`Return(Args…)`指明了返回值類型和參數類型,這個結構體用於特化含有函數類型參數的模板。
五、C++模板 函子
template <typename T> class myPlus { public: T operator()(const T& x, const T& y) const { return x + y; } };
C++模板 函子是指一個行為類似於函數的對象,可以通過重載函數括弧運算符()實現。模板 函子可以像函數指針一樣被傳遞和調用,但是可以存儲更多的狀態信息。
六、C++模板 auto
template <typename T, typename U> auto myAdd(T x, U y) -> decltype(x + y) { return x + y; }
C++模板 auto用於在編譯期間自動推導類型。在這個例子中,myAdd函數的返回類型使用decltype函數自動推導,它表示返回值的類型與表達式x + y的類型相同。
七、C++模板編程
C++模板編程是指利用模板技術編寫通用的程序。模板編程可以在編譯期間實現運行時演算法,並實現代碼復用和性能優化。應該注意的是,C++模板編程有時候可能會使代碼變得晦澀難懂。
八、C++模板類 構造函數
template <typename T> class myVec { private: T* ptr; int size; public: myVec() { ptr = nullptr; size = 0; } explicit myVec(int n) { ptr = new T[n]; size = n; } // copy constructor myVec(const myVec& v) { ptr = new T[v.size]; for(int i = 0; i < v.size; i++) { ptr[i] = v.ptr[i]; } size = v.size; } // move constructor myVec(myVec&& v) { ptr = v.ptr; size = v.size; v.ptr = nullptr; v.size = 0; } ~myVec() { delete[] ptr; } };
C++模板類的構造函數是類的特殊成員函數,用於創建和初始化類的對象。在這個例子中,我們定義了一個myVec模板類,有默認構造函數和一個顯式構造函數,還有拷貝構造函數和移動構造函數。
九、C++模板 特化規則
template <typename T> struct myType { void printType() { std::cout << "This is a normal type." << std::endl; } }; template<> struct myType<int> { void printType() { std::cout << "This is an integer type." << std::endl; } };
C++模板特化是將一個通用模板提供給特定類型使用的技術。特化通常用於為某些類型編寫特定的實現。在這個例子中,我們定義了一個myType結構體模板,有一個默認的printType成員函數。通過特化,如果模板參數為int類型,則使用特殊實現的printType函數。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/280632.html