1. 在类模板中使用类型时要加上模板类型,如:Stack<T>。而表示类时就只用类名,如:Stack。

2. 一个绝对异常安全并且返回被删除元素的pop()是不可能的。参考[CargillExceptionSafty]

3. 对于类模板,成员函数只有在被使用的时候才会被实例化。如果类模板中含有静态成员,那么用来实例化的每种类型,都会实例化这些静态成员。

4. 特化类模板

template<>
class Stack<std::string>
{
public:
    void push(std::string const& elem);
    void pop();
    std::string top() const;
    bool empty() const;
private:
    //Stack(Stack<T> const&);
    Stack<std::string>& operator=(Stack<std::string> const&);
private:
    std::vector<std::string> m_elems;
};
 
void Stack<std::string>::push(const std::string &elem)
{
    m_elems.push_back(elem);
}

相关文章: