Linux C/C++ 模板:类模板成员特化

来源:互联网 发布:javascript 控制台输出 编辑:程序博客网 时间:2024/05/18 13:04

一、代码

        不需要完全特化整个类,只特化相关函数即可。

#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;}

二、输出结果


0 0
原创粉丝点击