#c #templates
#c #шаблоны
Вопрос:
У меня есть пользовательский класс массива
template lt;typename T, unsigned Lgt; class Array { T m_buff[L]; };
Моя цель состоит в том, чтобы объявить функцию, которая будет копировать класс массива и использовать его значения для возврата суммы всех элементов.
Проблема в том, что код компилируется только для функции, определенной как int sum(Arraylt;int, 3gt; a)
, а не для функции, определенной как int sum(Arraylt;intgt; a)
.
Комментарии:
1.
templatelt;typename T, unsigned Lgt; T sum(const Arraylt;T,Lgt; amp;array) { /* calc, return sum */}
. Возможно, вы захотите рассмотреть возможность использования типов из стандартной библиотеки (например, шаблонныхstd::array
) и стандартных алгоритмов (напримерstd::accumulate()
) для добавления элементов одного.2. Я знаю о стандартной реализации массива, но я хочу создать свою собственную.
Ответ №1:
не для функции, определенной как int sum(массив a).
Это потому Arraylt;intgt;
, что это недопустимый тип. Для вашего Array
шаблона требуется два параметра, а не один.
То, что вы ищете, — это просто еще одна функция шаблона:
templatelt;unsigned sizegt; int sum(const Arraylt;int, sizegt; amp;a) { // Function code here: }
Что касается того, как его закодировать: просто подумайте , каким должен быть ваш код, в случае вашего Arraylt;int, 3gt;
, или, может быть, Arraylt;int, 100000gt;
и замените 3
или 100000
на size
/