Написать и вызвать функцию с переменным количеством параметров

242
19 сентября 2017, 08:33

Задача есть, нужно отдельно задать функцию со сменным числом параметров, а потом ее вызвать.

Задача на нахождение минимального или максимального значения

float min(int k . . .)

была проблема в этой штуке, она нужна обязательно в первой функцией, я на очень знаю с++, и непонятно как с ней работать дальше.

Answer 1
#include <utility>
#include <type_traits>
#include <initializer_list>
#include <algorithm>
template<class Head, class... Tail>
constexpr std::common_type_t<Head, Tail...> variadic_min(const Head& head, const Tail&... tail){
    using common_type = std::common_type_t<Head, Tail...>;
    common_type retval = head;
    std::initializer_list<common_type> unused = {retval = std::min(retval, static_cast<common_type>(tail))...};
    return retval;
}
constexpr auto foo(){
    return variadic_min(1, 1.9, -2, 6, -4.3);
}
static_assert(foo() == -4.3, "");
Answer 2

В С++ есть 3 способа написания функций с переменным числом параметров:

  • с использованием шаблона с переменным количеством аргументов (пример в ответе выше);
  • с использованием библиотечного класса initializer_list, для случая, если все параметры имеют одинаковый тип;
  • с использованием varargs (в стиле Си).

Вот как реализуется вариант с использованием initializer_list:

#include <iostream>
#include <initializer_list>
float min(std::initializer_list<float> ld)
{
    if (ld.size() == 0) {
        throw std::invalid_argument("Arguments list is empty!");
    }
    float ret;
    for (auto beg = ld.begin(); beg != ld.end(); ++beg) {
        if (beg == ld.begin()) {
           ret = *beg;
        } else if (ret > *beg) {
            ret = *beg;
        }
    }
    return ret;
}
int main()
{
    std::cout << min({4.5, -6, 3.14}) << std::endl;
    return 0;
}
READ ALSO
Одно действие по двум событиям в jQuery

Одно действие по двум событиям в jQuery

ajax запрос вызывается по двум действиям:

210
Как на мобильном спрятать слайд из Slick-карусели?

Как на мобильном спрятать слайд из Slick-карусели?

Использую карусель Slick в одном из проектовПоставил в неё пять слайдов — четыре картинки и видео

246
Доработка поискового скрипта

Доработка поискового скрипта

Здравствуйте! Есть переделанный из этого онлайн-примера скрипт, настроенный для поиска по локальным изображениям, где нерешенными остались...

216