C++模板元編程測試卷_第1頁
C++模板元編程測試卷_第2頁
C++模板元編程測試卷_第3頁
C++模板元編程測試卷_第4頁
C++模板元編程測試卷_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

C++模板元編程測試卷```cppinclude<iostream>include<type_traits>//1.定義一個模板結(jié)構(gòu)體,用于判斷一個類型是否為整數(shù)類型template<typenameT>structis_integer{staticconstboolvalue=false;};template<>structis_integer<int>{staticconstboolvalue=true;};template<>structis_integer<long>{staticconstboolvalue=true;};template<>structis_integer<longlong>{staticconstboolvalue=true;};template<>structis_integershort>{staticconstboolvalue=true;};//2.定義一個模板函數(shù),計算兩個整數(shù)的最大值template<typenameT>Tmax(Ta,Tb){returna>b?a:b;}//3.使用SFINAE技術(shù),定義一個模板函數(shù),判斷一個類型是否可以調(diào)用sqrt函數(shù)template<typenameT>std::enable_if_t<std::is_floating_point_v<T>,T>sqrt(Tx){returnx;}//4.定義一個模板類,實現(xiàn)一個簡單的單例模式template<typenameT>classSingleton{public:staticT&instance(){staticTinstance;returninstance;}private:Singleton()=default;~Singleton()=default;Singleton(constSingleton&)=delete;Singleton&operator=(constSingleton&)=delete;};//5.定義一個模板類,實現(xiàn)一個泛型隊列template<typenameT>classQueue{private:std::vector<T>data;public:voidpush(constT&value){data.push_back(value);}voidpop(){if(!empty()){data.erase(data.begin());}}Tfront()const{returndata.front();}Tback()const{returndata.back();}boolempty()const{returndata.empty();}size_tsize()const{returndata.size();}};//6.定義一個模板結(jié)構(gòu)體,用于判斷一個類型是否為標(biāo)準(zhǔn)庫中的容器類型template<typenameT>structis_container{staticconstboolvalue=false;};template<typenameT>structis_container<std::vector<T>>{staticconstboolvalue=true;};template<typenameT>structis_container<std::list<T>>{staticconstboolvalue=true;};template<typenameT>structis_container<std::deque<T>>{staticconstboolvalue=true;};template<typenameT>structis_container<std::set<T>>{staticconstboolvalue=true;};template<typenameT>structis_container<std::map<T>>{staticconstboolvalue=true;};//7.定義一個模板函數(shù),判斷一個類型是否為標(biāo)準(zhǔn)庫中的容器類型template<typenameT>std::enable_if_t<is_container<T>::value,void>check_container(T&container){std::cout<<"It'sacontainer."<<std::endl;}//8.定義一個模板類,實現(xiàn)一個泛型工廠模式template<typenameT>classFactory{public:staticTcreate(){returnT();}};//9.定義一個模板結(jié)構(gòu)體,用于判斷一個類型是否為空類template<typenameT>structis_empty_class{staticconstboolvalue=false;};template<>structis_empty_class<>{staticconstboolvalue=true;};//10.定義一個模板函數(shù),計算兩個數(shù)的和template<typenameT>Tadd(Ta,Tb){returna+b;}intmain(){//測試is_integerstd::cout<<std::boolalpha;std::cout<<"is_integer<int>:"<<is_integer<int>::value<<std::endl;std::cout<<"is_integer<double>:"<<is_integer<double>::value<<std::endl;//測試maxstd::cout<<"max(3,5):"<<max(3,5)<<std::endl;std::cout<<"max(3.5,5.1):"<<max(3.5,5.1)<<std::endl;//測試sqrtstd::cout<<"sqrt(9):"<<sqrt(9)<<std::endl;//測試SingletonSingleton<int>singletonInstance;std::cout<<"Singletoninstancevalue:"<<singletonInstance.instance()<<std::endl;//測試QueueQueue<int>queue;queue.push(1);queue.push(2);queue.push(3);std::cout<<"Queuefront:"<<queue.front()<<std::endl;queue.pop();std::cout<<"Queuefrontafterpop:"<<queue.front()<<std::endl;//測試is_containerstd::vector<int>vec={1,2,3};check_container(vec);intnum=5;check_container(num);//測試Factorystd::cout<<"Factory<int>instance:"<<Factory<int>::create()<<std::endl;//測試is_empty_classstd::cout<<"is_empty_class<EmptyClass>:"<<is_empty_class<Empt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論