C Templates學習筆記三 非型別模板引數

2021-09-29 09:20:56 字數 730 閱讀 1837

對於函式模板和類模板,模板引數並不侷限於型別,值也可以作為模板引數。

一:非型別的類模板引數

例項:

templateclass stack

bool full() const

};templatestack::stack():

numelems(0)

templatevoid stack::push(t const& elem)

elemsp[numelems] = elem;

numelems++;

}templatevoid stack::pop()

--numelems;

}templatet stack::top() const

return elems[numelems - 1];

}

stackint20stack;

stackint40stack;

這是兩個不同型別的模板例項,不能互相替換或者賦值。

二:非型別的函式模板引數

templatet addvalue(t const& x)

三:一些限制

可以是常整數(包括列舉值) 或者指向外部鏈結物件的指標。

浮點數和類物件不允許作為非型別模板引數。

string是內部鏈結物件。

C Templates學習筆記(類模板)

類模板stack 是通過c 標準庫的類模板vector 來實現的,因此不需要自己實現記憶體管理 拷貝建構函式和賦值運算子。標頭檔案宣告 include include using namespace std template class stack 成員函式的實現 template void sta...

C Templates學習筆記 例項化

一 on demand例項化 有時候也被稱為隱式例項化或者自動例項化。on demand例項化表明 在使用模板 特化 的地方,編譯器通常需要訪問模板和某些模板成員的整個定義。例子 templateclass c 前置宣告 c p 0 正確,因為這裡不需要知道c的定義 template class c...

C Templates學習筆記二 類模板

一 類模板的實現 例項 include include template 類模板宣告部分 同樣可以使用class t為模板引數 class stack template void stack push t const elem templatevoid stack pop elems.pop bac...