模板Template
来源:互联网 发布:历年双十一数据统计 编辑:程序博客网 时间:2024/05/01 12:09
模板(Template)指C++程序设计语言中的函数模板与类別模板,大体对应于java和C#中的泛型。目前,模板已经成为C++的泛型编程中不可缺少的一部分。
模板定义以关键字template开始,后接模板形参表,模板形参表是用尖括号括住的一个或者多个模板形参的列表,形参之间以逗号分隔。 模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。非类型形参跟在类型说明符之后声明。类型形参跟在关键字class或typename之后定义。
模板是C++程式員絕佳的武器, 特別是結合了多重繼承(multiple inheritance)與運算子重載(operator overloading)之後。C++ 的標準函式庫提供許多有用的函式大多結合了模板的觀念,如STL以及IO Stream。
函数模板
以下以取最大值的函数模板maximum為例。此函數在編譯時會自動產生對應輸入變數的資料類別的實際程式碼。
#include <iostream> template <typename T>inline const T& maximum(const T& x,const T& y){ if(y > x) return y; else return x;} int main(void){ using namespace std; //Calling template function std::cout << maximum<int>(3,7) << std::endl; //输出 7 std::cout << maximum(3, 7) << std::endl; //和上面相同 std::cout << maximum<double>(3.0,7.0) << std::endl; //输出 7 return 0;}
类別模板
- 以下以將元件指標的操作,封裝成类別模板ComPtr為例。
#pragma once template <typename Ty>class ComPtr{protected: Ty* m_ptr; public: ComPtr() { m_ptr = NULL; } ComPtr(const ComPtr& rhs) { m_ptr = NULL; SetComPtr(rhs.m_ptr); } ComPtr(Ty* p) { m_ptr = NULL; SetComPtr(p); } ~ComPtr() { Release(); } const ComPtr& operator=(const ComPtr& rhs) { SetComPtr(rhs.m_ptr); return *this; } Ty* operator=(Ty* p) { SetComPtr(p); return p; } operator Ty* () { return m_ptr; } Ty* operator->() { return m_ptr; } operator Ty** () { Release(); return &m_ptr; } operator void** () { Release(); return (void**)&m_ptr; } bool IsEmpty() { return (m_ptr == NULL); } void SetComPtr(Ty* p) { Release(); m_ptr = p; if (m_ptr) { m_ptr->AddRef(); } } void Release() { if (m_ptr) { m_ptr->Release(); m_ptr = NULL; } }};
- 模板Template
- 模板Template
- 模板(template)
- template 模板
- 模板template
- 模板(Template)
- template模板
- template模板
- template模板
- 模板template
- 模板template
- 模板template
- vue的模板 <template></template>
- C++ template 模板 模板别名
- pnews.template模板
- C++之模板(Template)
- Page Template(页模板)
- Template Functions 模板函数
- 临时表空间满的解决办法
- Android中 得到ImageView中显示的图片
- 从SQL Server删除大数据说开去
- 静态 局部 全局变量 反汇编
- 高级OWI与ORACLE性能调整读书笔记之UPDATE/UPADTE引起的buffer busy wait
- 模板Template
- "Connection reset by peer" Exceptions in Jetty when client is using IE8 and closes tab during loadin
- Javascript 教程
- 检查Office版本工具(通过注册表)
- SQL Server BCP使用小结
- 如何使大脑精神集中
- visual studio运行时库MT、MTd、MD、MDd的研究
- C++中的强制类型转换
- MD5加密