Здравствуйте, Коллеги.
Задача передать в функцию массив: указатель на первый член и размер
Чтобы не генерить разные тела шаблонной функции для разных статических массивов, сделал шаблонную функцию make_carray в которой вычисляется размер массива и возвращается объектик массива.
Помогите, пожалуйста, упростить и убрать вложенный вызов make_carray
#include <iostream>
using namespace std;
/* обертка для массива */
template<typename T>
struct carray
{
T *parr;
size_t size;
};
/* вспомогательная функция для вычисления размера массива */
template<typename T, size_t N>
carray<T> make_carray(T (&arr)[N])
{
carray<T> res = {arr, N};
return res;
}
/* сама полезная работа */
void f1(const carray<int>& arr)
{
for (size_t i = 0; i < arr.size; ++i)
{
cout << arr.parr[i] << endl;
}
}
int main(int argc, char *argv[])
{
int data[] = {1, 2, 3};
f1(make_carray(data)); // вложенный вызов make_carray, от которого хочется избавиться
return 0;
}
хочется чтобы работало без make_carray
int main(int argc, char *argv[])
{
int data[] = {1, 2, 3};
[b]f1(data); // избавились от вложенного вызова make_carray
return 0;
}