Linux C/C++ 模板:类模板成员特化
2015-04-11 00:31
363 查看
一、代码
不需要完全特化整个类,只特化相关函数即可。
二、输出结果
不需要完全特化整个类,只特化相关函数即可。
#include <iostream> #include <cstring> #include <vector> #include <algorithm> using namespace std; //主模板 template <typename T> class Heap { public: void push(const T& val); T pop(); bool empty() const { return m_vec.empty(); } private: vector<T> m_vec; }; template <typename T> void Heap<T>::push(const T& val) { m_vec.push_back(val); push_heap(m_vec.begin(), m_vec.end()); } template <typename T> T Heap<T>::pop() { pop_heap(m_vec.begin(), m_vec.end()); T tmp = m_vec.back(); m_vec.pop_back(); return tmp; } // bool strLess(const char* a, const char* b) { return strcmp(a, b) < 0; } //类模板成员特化 template <> void Heap<const char*>::push(const char* const & val) //参数格式必须与原型一致 { m_vec.push_back(val); push_heap(m_vec.begin(), m_vec.end(), strLess); } //类模板成员特化 template <> const char* Heap<const char*>::pop() { pop_heap(m_vec.begin(), m_vec.end()); const char* tmp = m_vec.back(); m_vec.pop_back(); return tmp; } // int main(int argc, char*argv[]) { // Heap<int> h1; h1.push(1); h1.push(3); h1.push(2); cout<<"is empty: "<<h1.empty()<<endl; cout<<h1.pop()<<endl; cout<<h1.pop()<<endl; cout<<h1.pop()<<endl; cout<<"is empty: "<<h1.empty()<<endl<<endl; // Heap<const char*> h2; h2.push("aa"); h2.push("cc"); h2.push("bb"); cout<<"is empty: "<<h2.empty()<<endl; cout<<h2.pop()<<endl; cout<<h2.pop()<<endl; cout<<h2.pop()<<endl; cout<<"is empty: "<<h2.empty()<<endl; return 0; }
二、输出结果
相关文章推荐
- C++模板编程中只特化模板类的一个成员函数
- Linux C/C++ 模板:主模板、完全特化、局部特化
- Linux C/C++ 模板:主模板、完全特化
- Linux C/C++ 模板:成员模板
- 【C++模板】特化与偏特化 template [partial] specialization
- 用汇编的眼光看C++(之缺省模板、特化模板)
- C++模板中type_traits(类型特化)
- C++模板:究竟什么是特化?
- c++ template - 成员模板
- Step By Step(C++模板重载和特化)
- 【C++模板】特化与偏特化 template [partial] specialization
- C++模板技巧:编译期探测类成员
- 用汇编的眼光看c++(之模板函数) ,(之缺省模板、特化模板) .
- C++ 中模板的特化 与 偏特化
- C++ Standard Stl -- SGI STL源码学习笔记(03) STL中的模板编译期检查与偏特化编译期检查
- 【c++】模板的特化
- STL运用的C++技术(1)——成员模板
- C++模板的定制四:定制成员函数和缺省类参
- C++模板的特化
- C++的模板特化及STL中iterator_traits模板的偏特化