Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
супер тупой
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 89
Завершенные тесты: 1
1

Функция с переменным числом аргументов (через шаблоны)

10.04.2016, 13:41. Просмотров 878. Ответов 5
Метки нет (Все метки)

Доброго времени суток! Встал вопрос с реализацией такой функции.
C++
1
2
3
4
5
    template<typename... Args> returntype functionname(const Args&... args) {
        std::vector<Args> x(sizeof...(args));
        //вот тут хочу организовать что-то на подобии
        //for (size_t i = 0; i < x.size(); ++i) x[i] = args[i];
    }
Не понимаю, как развернуть пакет аргументов.

Находил на SO такой вариант:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
template<typename... T>
int f(const T&... args) {
    //...
    for (auto&& p : std::initializer_list<T>{args...})
        //...
    //...
}
Но у меня он работать отказывается, выдавая на строку for(...) примерно такое:
error C2440: инициализация: невозможно преобразовать "initializer list" в "std::initializer_list<Args>"
note: Недопустимая агрегатная инициализация

Мне по сути нужно принять N аргументов, запихнуть их все в вектор и кинуть дальше.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2016, 13:41
Ответы с готовыми решениями:

Шаблоны с переменным числом аргументов
Написал шаблон функции с переменным числом аргументов которая считает сумму...

Шаблонная функция с переменным числом аргументов
Сабж. Каким образом можно запретить использование шаблонной функции, если тип...

Функции с переменным числом аргументов
Ребята, подскажите пожалуйста, где можно обстоятельно и подробно прочитать про...

Функции с переменным числом аргументов
на пример sum(2,56,515,-23.65,548)?

GCC и функции с переменным числом аргументов
Писал мини приложение в студии для работы с векторами, один из методов просто...

5
Croessmah
++Ͻ
14631 / 8380 / 1582
Регистрация: 27.09.2012
Сообщений: 20,597
Записей в блоге: 2
Завершенные тесты: 1
10.04.2016, 14:34 2
std::tuple смотрели?
1
DrOffset
8466 / 4743 / 1161
Регистрация: 30.01.2014
Сообщений: 7,730
10.04.2016, 14:46 3
Цитата Сообщение от супер тупой Посмотреть сообщение
нужно принять N аргументов, запихнуть их все в вектор и кинуть дальше
Так эти аргументы одного типа или разных?

Может что-то такое нужно?
C++
1
2
3
4
5
6
template<typename ...Args> 
void func(const Args & ...args) {
    std::vector<typename std::common_type<Args...>::type> x{ args... };
 
    //.......
}
1
супер тупой
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 89
Завершенные тесты: 1
10.04.2016, 15:53  [ТС] 4
Croessmah, посмотрел, но у меня будут аргументы приводимого типа(читай одного), но все равно спасибо!
DrOffset, вот скорее всего такое и нужно! Не знал, что можно так инициализировать вектор.
Правда встает вопрос. Сделал так, все вроде бы хорошо, но если передаю f(1.1,2.2,3), то компилятор ругается:
error C2398: Элемент "3": преобразование из "const int" в "double" требует сужающего преобразования
От этого никак не получится избавиться, например, чтобы он просто автоматически преобразовывал тип?
0
DrOffset
8466 / 4743 / 1161
Регистрация: 30.01.2014
Сообщений: 7,730
10.04.2016, 15:57 5
Лучший ответ Сообщение было отмечено супер тупой как решение

Решение

Цитата Сообщение от супер тупой Посмотреть сообщение
От этого никак не получится избавиться, например, чтобы он просто автоматически преобразовывал тип?
C++
1
2
3
4
5
6
7
8
template<typename ...Args> 
void func(const Args & ...args) {
    using dest_type = typename std::common_type<Args...>::type;
    
    std::vector<dest_type> x{ static_cast<dest_type>(args)... };
 
    //.......
}
1
супер тупой
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 89
Завершенные тесты: 1
10.04.2016, 16:00  [ТС] 6
DrOffset, идеально, спасибо!
0
10.04.2016, 16:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2016, 16:00

Написать функцию с переменным числом аргументов
Помогите понять, что от меня хотят-то вообще. Мне нужно: объявить функции в...

Инициализация std::tuple переменным числом аргументов
Добрый вечер. Мне нужно инициализировать объект std::tuple, который является...

Шаблон с переменным числом аргументов, и возвращаемое значение функции
Здравствуйте! Использую С++11. Хочу возвращать элементы кортежа пытаюсь так,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru