大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C++技巧 > C++类模板详细讲解

C++类模板详细讲解(2)

关键词:类模板C++  阅读(1232) 赞(14)

[摘要]本文是对C++类模板的讲解,对学习C++编程技术有所帮助,与大家分享。

显然,这样可以节省时间和空间,另一个好处是:对于那些“未能提供所有成员函数中所有操作的”类型,你可以使用该类型来实例化类模板,只要对那些“未能提供某些操作的”成员函数,模板内部不使用就可以。

你可以像使用其他任何类型一样地使用实例化后的类模板类型(例如Stack<int>),只要它支持所调用的操作就可以:

void foo(Stack<int> const& s)
{
    Stack<int> istack[10];
    ...
}

借助于typedef,可以方便的使用类模板:

typedef Stack<int> IntStack;
void foo(IntStack const& s)
{
    IntStack<int> istack[10];
    ...
}

类模板的特化
可以使用模板实参来特化类模板,和函数模板的重载类似,通过特化类模板,你可以优化基于某种特定类型的实现,或者克服某种特定类型在实例化类模板时所出现的不足。

为了特化一个类,你必须在起始处声明一个template<>,接下来声明用来特化类模板的类型:

template<>
class Stack<string> {
private:
    deque<string> elems;
public:
    void push(string const&);
    void pop();
    string top() const;
    bool empty() const {
        return elems.empty();
    }
};

void Stack<string>::push(string const& elem)
{
    elems.push_back(elem);
}

void Stack<string>::pop()
{
    if(elems.empty()) {
        out_of_range("Stack<string>::pop(): empty stack");
    }
    elems.pop_back();
}

string Stack<string>::top()
{
    if(elems.empty()) {
        out_of_range("Stack<string>::top(): empty stack");
    }
    return elems.back();
}
«上一页12下一页»


相关评论