Инициализация массива с помощью функции в C ++ - PullRequest
0 голосов
/ 14 октября 2019

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

Пока что я написал constexprфункция, которая принимает два массива одинаковой длины и возвращает std::array по значению, которое затем используется для инициализации массива.

inline std::array<param_t, N> transpose(int const (&mg)[N], int const (&eg)[N]) {
    std::array<param_t, N> ret{};
    for(size_t i = 0; i < N; i++) {
        ret[i] = {mg[i], eg[i]};
    }
    return ret;
}
struct some_params {
    param_t mat[5] = transpose({92, 367, 444, 583, 1342}, {88, 370, 394, 646, 1233});
}

Это приводит к ошибке компилятора: Array initializer must be an initializer list. Я не уверен, как я могу вернуть std::initializer_list, учитывая, что он не имеет подходящего конструктора и разработан как временный. По разным причинам я не могу изменить тип мата на std::array.

Как я могу инициализировать подобный массив из функции?

1 Ответ

0 голосов
/ 14 октября 2019

Я не уверен, как вернуть std :: initializer_list,

Непустой std::initializer_list может быть создан только с использованием фигурной скобки -init-лист . Вы не можете создать std::initializer_list из пустого объекта.

Для вашего конкретного случая использования вы можете использовать:

std::array<param_t, 5> mat = transpose({92, 367, 444, 583, 1342}, {88, 370, 394, 646, 1233});
...