C++ Array容器的顯示和隱式實例化詳細介紹
提到Array容器的隱式實例化和顯式實例化,不得不先說說Array的類模板。
類模板自己本身并不是一個類型和對象,模板必須進行實例化,實例化分為隱式和顯式兩種。
隱式實例化:在需要一個完整定義類型的代碼中,如果該類型是通過某個模板來提供,就會發(fā)生模板的隱式實例化。
顯式實例化:常用在模板的接口與實現(xiàn)分離的場合,顯式實例化效率較高。
下面創(chuàng)建了Array的類模板和實例化:
1、Array的類模板和隱式實例化
//arraytp.hpp #pragma once template<typename T, size_t N> class Array { public: using size_type = size_t; //遍歷array void traverse() { for (const auto& e : arr) { std::cout << e << ' '; } std::cout << '\n'; } T& operator[](size_type i) { return arr[i]; } private: T arr[N]; };
// Arrytest.cpp #include <iostream> #include"arraytp.hpp" int main() { //定義一個長度為9的Array數(shù)組容器 Array<int, 9> ia; //給ia賦值 for (int i = 0; i < 9; i++) { ia[i] = i; } //遍歷ia ia.traverse(); return 0; }
運行結(jié)果:
2、Array類模板的接口和實現(xiàn)
顯式實例化:
//arraytp.hpp #pragma once template<typename T, size_t N> class Array { public: using size_type = size_t; void traverse(); T& operator[](size_type i); private: T arr[N]; };
//m1.cpp #include<iostream> #include<string> #include "arraytp.hpp" template<typename T,size_t N> //遍歷Array void Array<T, N>::traverse() { for (const auto& e : arr) { std::cout << e << ' '; } std::cout << '\n'; } template<typename T,size_t N> T& Array<T, N>::operator[](size_type i) { return arr[i]; } //在類模板中創(chuàng)建了三個顯式類型 template class Array<int, 9>; template class Array<double, 9>; template class Array<std::string, 9>;
// ArryDisplay.cpp #include <iostream> #include"arraytp.hpp" void assignment(); int main() { assignment(); } void assignment() { //定義一個長度為9的Array數(shù)組容器 Array<double, 9> ia; //給ia賦值 for (int i = 0; i < 9; i++) { ia[i] = i; } //遍歷 ia.traverse(); }
運行結(jié)果:
在顯式實例化中是將模板的接口和實現(xiàn)分離了,同時在模板的實現(xiàn)中又三個顯式類型,顯式實例化還可以減少編譯時間和對象大小。
.hpp文件是.h頭文件和.cpp源文件的結(jié)合,.h文件放聲明,.cpp文件放實現(xiàn),而.hpp文件就是將聲明和實現(xiàn)放在一起。
size_t是標準C庫中定義的,它是一個基本的與機器相關(guān)的無符號整數(shù)的C/C++類型。
參考書籍:Accelerated C++和Cpp_Primer_5
到此這篇關(guān)于C++ Array容器的顯示和隱式實例化詳細介紹的文章就介紹到這了,更多相關(guān)C++ Array容器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
FFmpeg實現(xiàn)變速播放的兩種方法總結(jié)
這篇文章主要為大家詳細介紹了FFmpeg中實現(xiàn)變速播放的兩種方法,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的可以了解一下2023-07-07C語言數(shù)據(jù)結(jié)構(gòu)與算法之單鏈表
單鏈表是一種鏈式存取的數(shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲單元存放線性表中的數(shù)據(jù)元素。本文將為大家介紹C語言中單鏈表的基本概念與讀取數(shù)據(jù)元素,需要的可以參考一下2021-12-12