Функция, которая принимает параметр длины шаблона

#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 /