C Templates學習筆記二 類模板

2021-09-29 09:12:40 字數 1507 閱讀 8274

一:類模板的實現

例項: 

#include #include template //類模板宣告部分 同樣可以使用class t為模板引數

class stack

};template void stack::push(t const& elem)

templatevoid stack::pop()

elems.pop_back();

}template t stack::top() const

return elems.back();

}

注:類的型別是stack,類名是stack 指定型別,建構函式 析構函式 應該用stack

二:類模板的使用

例項:

int main()

catch (std::exception const& ex)

}

注:只有在呼叫成員函式時才會產生例項化**,可以節約空間和時間,而且對於使用了某些型別不支援操作的函式,不呼叫就可以。模板實參可以是任何型別,但是該型別必須提供被呼叫的所有操作。

特:stack> intstackstack; 兩個》中間必須要有空格 否則會被理解為operator>>

三:類模板的特化

目的:優化某種特定型別的實現,或者克服某種特定型別的不足,例如不支援某些操作等等。

特化一整個類模板,需要特化所有的成員函式

例項:

template<>

class stack

};void stack::push(std::string const& elem)

void stack::pop()

elems.pop_back();

}std::string stack < std::string >::top() const

return elems.back();

}

四:類模板的區域性特化

template class myclass ;

//區域性特化版本

template class myclass;

template class myclass;

templateclass myclass;

注意二義性問題。

五:預設模板實參

template >

class stack

};template void stack::push(t const& elem)

template void stack::pop()

elems.pop_back();

}template void stack::top() const

return elems.back();

}

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學習筆記五 模板實戰

使用分離模型 讓模板定義和宣告在不同的檔案裡可能會導致鏈結錯誤。為了解決這種問題,我們把模板的宣告和定義都放在同乙個標頭檔案裡。例如 ifdef myfirst hpp define myfirst hpp include include template void print typeof t c...