本質上來說,模板就是將型別引數化以解決強型別語言的嚴格性和靈活性的衝突。當然這一問題的解決還有兩種方法,分別為帶引數巨集定義和過載函式。
其中普通函式與函式模板可以過載,而且函式模板之間也可以過載。模板一般不進行分檔案編寫,可就在標頭檔案中實現,標頭檔案字尾為.hpp。
模板可分為函式模板和類模板,通過模板例項化構造出具體的函式和類稱為模板函式和模板類。
普通函式優先於模板函式的執行。
模板形參的設定
模板的例項化
可變模板引數
可變模板引數是c++11新增的最強大特性之一,它對引數進行了高度泛化,能表示任意個引數。
引數包①模板引數包 templateclass tuple,args被稱為模板引數包,表示可以接收任意多個引數作為模板引數,編譯器將多個模板引數打包成單個模板引數包
②函式引數包 templatevoid func(t…args);args稱為函式引數包,表示該函式可以接收多個任意型別的引數
c++11要求引數包必須唯一,且為最後乙個引數;當宣告乙個變數為可變引數時,省略號在該變數的左邊;當使用引數包時,省略號位於引數包的左側,表示立即展開該可變引數,此過程也被稱為解包
模板實現佇列
#pragma once
#include
using namespace std;
template
class queue
;template
queue::
queue
(int n)
:_arr
(new t[n+1]
()),
_size
(n+1),
_front(0
),_rear(0
)template
queue::
~queue()
template
bool queue::
isempty()
template
bool queue::
isfull()
template
void queue::
push
(t n)
}template
void queue::
pop()}
template
void queue::
print()
else
}template
t queue::
getfront()
template
t queue::
getrear()
#include
"template_queue.hpp"
void
test0()
//測試整形
void
test1()
//測試字元型
void
test2()
//測試string型別
intmain
(int argc,
char
*ar**)
模板實現單例模式#pragma once
#include
#include
using namespace std;
//建立單例物件實現乙個模板形式的單例類,
//要求對於任意型別的類經過singleton的處理之後,
//都能獲取乙個單例物件,並且可以傳遞任意引數
template
class singleton;~
singleton()
;public:
template..args>
//傳遞任意個引數
static t *
getinstance
(args.
..args)
static
void
destory()
};template
t * singleton
::_pinstance = nullptr;
class point
;point
(int x,
int y =22)
:_ix
(x),
_iy(y)
~point()
void
print()
};class computer
~computer()
void
print()
};#include
"template_single_class.hpp"
void
test()
intmain
(int argc,
char
*ar**)
C 學習筆記11
11.集合1.泛型集合所在命名空間 system.collection.qeneric 2.非泛型集合所在命名空間 system.collection 3.常用介面 1 enumerator 只要實現了該介面的類就支援foreach遍歷 2 icollection 實現了該介面,就能夠訪問count...
c 11學習筆記
c 98的 std auto ptr已經被徹底遺棄了,取而代之的是unique ptr shared ptr與weak ptr。大部分時候我們自己手動申請記憶體方式記憶體都是沒有問題的,問題是如果程式很大了之後,乙個複雜的物件,多次拷貝的代價非常高,很多地方都會使用到,只存在乙份拷貝顯然是最好的,這...
C 11學習筆記 Type Support
其實主要還是對c 的std庫的學習吧,雖然用的不少但是對c 的全貌還不太了解。主要包括3個部分 基本型別 rtti 萃取技術 traits size t 用的太多了,不說了。ptrdiff t 乙個有符號的型別,通常用來表示兩個指標相減的結果,是乙個機器相關的型別。和size t不同的是,size ...