C++ Template 表达式模板
//exprtmpl/sarray1.hpp
#include <stddef.h>
#include <cassert>
template<typename T>
class SArray
{
public:
//create array with initial size
explicitSArray (size_t s)
:storage(new T[s]), storage_size(s)
{
init();
}
//copy constructor
SArray(SArray<T> const&orig)
:storage(new T[orig.size()]), storage_size(orig.size())
{
copy(orig);
}
//destructor: free memory
~SArray()
{
delete[]storage;
}
//assignment operator
SArray<T>&operator= (SArray<T>const& orig)
{
if(&orig!=this)
{
copy(orig);
}
return*this;
}
//return size
size_tsize() const
{
returnstorage_size;
}
//index operator for constants and variables
Toperator[] (size_t idx) const
{
returnstorage[idx];
}
T&operator[] (size_t idx)
{
returnstorage[idx];
}
protected:
//init values with default constructor
voidinit()
{
for(size_t idx = 0; idx<size(); ++idx)