Здравстуй, многоуважаемый all
С некоторых пор меня заинтересовала проблема - как сделать в классе переменную - константый массив определенного типа и размера, содержимое которого берется из агрумента конструктора?
В голову пришло примерно следующее решение:
template <typename T>
class const_array
{
public:
const_array( const T* arr, int size )
: m_data(0), m_size(size)
{
m_data = new T[m_size];
for( int i = 0; i < m_size; i++ )
m_data[i] = arr[i];
}
~const_array()
{
delete []m_data;
}
const T& operator[] (int pos) const
{
if( pos < 0 )
pos = 0;
if( pos >= m_size )
pos = m_size - 1;
return m_data[ pos ];
}
int size() const { return m_size; }
protected:
T* m_data;
const int m_size;
};
class demo
{
public:
demo( const int* matrix, int size ) : m_ca(matrix, size) {}
protected:
const_array<int> m_ca;
};
Т.е. делается спецкласс, реализующий свойства константного массива, который можно инициализировать прямо в списке инициализации.
И работает! Но существуют ли какие нибудь другие способы сотворить подобное, или так и придется через шаблоны?
Жду больших дискуссий :)