Шаблонный параметр C++ в измерении массива

Я настоятельно рекомендую схему поддержания и хранимые процедуры в управлении исходным кодом.

имеющие версию хранимые процедуры Хранения позволяет им откатываться, когда определено быть проблематичным.

Схема является менее очевидным ответом в зависимости от того, что Вы имеете в виду. Очень полезно поддержать SQL, который определяет Ваши таблицы в управлении исходным кодом для дублирования сред (prod/dev/user и т.д.).

8
задан Lightness Races with Monica 11 August 2011 в 01:23
поделиться

4 ответа

Работает при использовании ссылок:

template<size_t n> double f(double (&c)[n]);
30
ответ дан 5 December 2019 в 05:34
поделиться

К сожалению, нет, потому что, когда вы передаете double c [5] в f () или любой массив в любую функцию, которая принимает массив в этом отношении, вы теряете информация о размере. Вы просто передаете указатель.

Изменить: Но см. Ответ gf для обходного пути.

1
ответ дан 5 December 2019 в 05:34
поделиться

нет, потому что в другом вызове аргумент может исходить откуда угодно. компилятор определенно не может преследовать ваши указатели во время выполнения .

edit: кстати, это работает для меня, но требует -std = c ++ 0x (я использую gcc 4.4)

#include <iostream>

template <int n>
struct T
{
    T&
    operator=(double const cc[n])
    {
        c = cc;
        return *this;
    }
    const double
    operator[](int const &i)
    {
        return c[i];
    }
    double c[n];
};

template<int n>
double
f(T<n> & x)
{
    return x[n-1];
}

int
main()
{
    T<5> t5 = {10, 20, 30, 40, 50};
    T<3> t3 = {100, 200, 300};
    std::cout << f(t5) << std::endl;
    std::cout << f(t3) << std::endl;
    return 0;
}
0
ответ дан 5 December 2019 в 05:34
поделиться

Это может помочь вам в решении вашей более серьезной проблемы (какой бы она ни была). Это позволит вам запрашивать размер / тип массива при компиляции.

template < typename T_, unsigned N_ >
class many {
public:
    typedef T_ T;
    enum { N = N_ };

    T array[N];
};

Justin

-1
ответ дан 5 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: