模板成员函数,嗯,是一个和我有距离的概念。。。
我写出来的答案和错误的答案几乎一样。。。汗一个。。。
贴上正确的代码吧,认真学习一下:
// A strongly exception-safe version:
//
template<typename T, size_t size>
class fixed_vector
{
public:
typedef T* iterator;
typedef const T* const_iterator;
fixed_vector() : v_( new T[size] ) { }
~fixed_vector() { delete[] v_; }
template<typename O, size_t osize>//再次定义一个不同的模板类型能够让其更通用
fixed_vector( const fixed_vector<O,osize>& other )
: v_( new T[size] )
{ try {copy(other.begin(),other.begin()+min(size,osize),//使用try catch结构保证稳定性
begin());}
catch(...) { delete[] v_; throw; }}
fixed_vector( const fixed_vector<T,size>& other )
: v_( new T[size] )
{ try {copy(other.begin(), other.end(), begin());}
catch(...) { delete[] v_; throw; }}
void Swap( fixed_vector<T,size>& other ) throw()
{
swap( v_, other.v_ );
}
template<typename O, size_t osize>
fixed_vector<T,size>& operator=(
const fixed_vector<O,osize>& other )//同上,采用新的模板类型来增加通用性
{
fixed_vector<T,size> temp( other ); // does all the work
Swap( temp ); return *this; // this can't throw
}
fixed_vector<T,size>& operator=(
const fixed_vector<T,size>& other ) {//为啥要两个拷贝赋值函数呢。。。模板不能特化?
fixed_vector<T,size> temp( other ); // does all the work
Swap( temp ); return *this; // this can't throw
}
iterator begin() { return v_; }
iterator end() { return v_+size; }
const_iterator begin() const { return v_; }
const_iterator end() const { return v_+size; }
private:
T* v_;
};