写c++程序时我们经常会把函数的定义写在xxx.h中,把函数的实现写在xxx.cpp, 但是当我们写带模版的函数和类时,这样写
就会出现问题,如下:
stack.h
//stack.h
#ifndef STACK_HPP
#define STACK_HPP
#include <vector>
#include <stdexcept>
template<typename T, typename TContainer = std::vector<T>>
class CStack
{
public:
void push(const T& vValue);
void pop();
T top() const;
bool empty() const {return m_Container.empty();}
private:
TContainer m_Container;
};
#endif
stack.cpp
#include "stack.h"
template<typename T, typename TContainer>
void CStack<T, TContainer>::push(const T& vValue)
{
m_Container.push_back(vValue);
}
template<typename T, typename TContainer>
void CStack<T, TContainer>::pop()
{
if (empty()) throw std::out_of_range("Stack::pop: empty stack\n");
m_Container.pop_back();
}
template<t