Помогите с выведением и преобразованием типа
От: Alexander Pazdnikov  
Дата: 22.12.09 12:57
Оценка:
Здравствуйте, Коллеги.

Задача передать в функцию массив: указатель на первый член и размер

Чтобы не генерить разные тела шаблонной функции для разных статических массивов, сделал шаблонную функцию 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;
}
array
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.