一:類模板的實現
例項:
#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...