Правила программирования на Си и Си++



         

156. Всегда знайте размер шаблона после его расширения - часть 3


array< array<int> > ar2(20);

Внутренний array<int>

создан с использованием конструктора по умолчанию, поэтому это 128-элементный массив; мы объявили 20-элементный массив из 128-элементных массивов.

Вы можете решить эту последнюю проблему при помощи наследования. Рассмотрим следующее определение производного класса:

template< class type, int

size >

class sized_array : public array<type>

{

public:

   sized_array() : array<type>(size) {}

};

Здесь ничего нет, кроме единственной встроенной функции, поэтому это определение очень маленького класса. Оно совсем не будет увеличивать размер программы, вне зависимости от того, сколько раз будет расширен шаблон. Вы теперь можете записать:

sized_array< sized_array<int,10>, 20> ar3;

для того, чтобы получить 20-элементный массив из 10-элементных массивов.




Содержание  Назад  Вперед