Создайте шаблонную функцию C ++, которая будет возвращать std :: array определенного размера - PullRequest
2 голосов
/ 08 мая 2019

Я создаю функцию под названием linspase с C ++ 17 со следующей структурой ввода linspace(double upper, double lower, int size). Функция должна создавать size равномерно распределенных чисел между lower и upper. Программирование этой функции легко; однако я хочу, чтобы он создал std::array<double, size>, где функция будет определять размер массива из вызова функции и передавать обратно тип данных std::array<double, size>. Я знаю, что шаблоны - единственный способ сделать это, но я не уверен, как создать шаблон. В общем псевдокоде я думаю, что это выглядит примерно так.

template <typedef T, size_t size>
T linspace(double lower, double upper, int num)
{
    /* ... Function meat goes here to create arr of size 
           num of evenly space numbers between lower and upper
    */     
    return arr
}

Однако я знаю, что это объявление шаблона неверно, и я не уверен, как оно должно выглядеть. Чтобы было ясно, я хочу, чтобы он возвращал std:;array определенного размера, а не std::vector.

1 Ответ

4 голосов
/ 08 мая 2019

Если вы (правильно) передаете размер массива в качестве параметра шаблона, он вам не нужен в качестве одного из аргументов функции, поэтому:

template <size_t size>
auto linspace(double lower, double upper) -> std::array<int, size>
{
    std::array<int, size> arr{};
    //populate the array ...
    return arr;
}

Поскольку вы используете c ++ 14, вы можете полностью избавиться от возвращаемого значения и получить такой прототип:

template <size_t size>
auto linspace(double lower, double upper)

Тогда вы можете использовать его следующим образом:

auto arr = linspace<1>(0, 1);

for(auto a : arr)
{
    std::cout << a << std::endl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...