Форум программистов, компьютерный форум CyberForum.ru

Передача неизвестного количества аргументов в функцию, как реализовать? - C++

Восстановить пароль Регистрация
 
young_snake
6 / 6 / 2
Регистрация: 26.12.2011
Сообщений: 259
30.06.2015, 09:34     Передача неизвестного количества аргументов в функцию, как реализовать? #1
Вот есть функция и в нее будут передаваться какие-то аргументы, причем заранее не известен их тип и количество (там уже в зависимости от типа нужно будет выполнять какие-то нибудь действия). В этом и вопрос, я не совсем догоняю как это реализовать. Как написать функцию, где количество аргументов заранее не известно и как узнать тип данных каждого аргумента? Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11819 / 6798 / 769
Регистрация: 27.09.2012
Сообщений: 16,876
Записей в блоге: 2
Завершенные тесты: 1
30.06.2015, 09:41     Передача неизвестного количества аргументов в функцию, как реализовать? #2
variadic templates в помощь
young_snake
6 / 6 / 2
Регистрация: 26.12.2011
Сообщений: 259
30.06.2015, 09:44  [ТС]     Передача неизвестного количества аргументов в функцию, как реализовать? #3
А как такие задачи в Си решались?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11819 / 6798 / 769
Регистрация: 27.09.2012
Сообщений: 16,876
Записей в блоге: 2
Завершенные тесты: 1
30.06.2015, 09:47     Передача неизвестного количества аргументов в функцию, как реализовать? #4
Цитата Сообщение от young_snake Посмотреть сообщение
А как такие задачи в Си решались?
Функции с неопределенным количеством параметров
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
30.06.2015, 10:40     Передача неизвестного количества аргументов в функцию, как реализовать? #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <typeinfo>
 
// пачка шаблонов для выбора действия по типу аргумента
// нужно создать по 1й функции для всех обрабатываемых типов
// это работает аля switch-case-default по типу аргумента
template<typename Arg>
void do_smth(Arg a) {
    std::cout << "typeinfo of a: " << typeid(a).name() << std::endl;
}
 
// функция для типа int
template<>
void do_smth<int>(int a) {
    std::cout << "it is int = " << a << std::endl;
}
 
// спец шаблон для обработки одиночного элемента
// нужен для прекращения рекурсии в обобщенном шаблоне
template<typename Arg>
void do_it(Arg a) {
    do_smth(a);
}
 
// функция с переменным числом параметров
template<typename Arg, typename... Args>
void do_it(Arg arg, Args... args) {
    do_smth(arg); // обрабатываем 1й аргумент
    do_it(args...); // переходим к следующему аргументу
}
 
 
int main() {
    do_it(1, 2, 3, 3.14, "test");
    return 0;
}
запустить код
https://ru.wikipedia.org/wiki/C++11
young_snake
6 / 6 / 2
Регистрация: 26.12.2011
Сообщений: 259
30.06.2015, 11:59  [ТС]     Передача неизвестного количества аргументов в функцию, как реализовать? #6
Спасибо за пример!
Yandex
Объявления
30.06.2015, 11:59     Передача неизвестного количества аргументов в функцию, как реализовать?
Ответ Создать тему
Опции темы

Текущее время: 15:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru