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

Подскажите пример функции с переменным числом параметров, в том числе 0 - C++

Восстановить пароль Регистрация
 
 
LostDok
 Аватар для LostDok
0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 49
05.07.2014, 19:12     Подскажите пример функции с переменным числом параметров, в том числе 0 #1
Здравствуйте.
Подскажите, пожалуйста, пример функции на С++, которая имела бы переменное количество параметров, в том числе 0. Функции с переменным количеством параметров на С++ есть, знаю. А вот такие, чтобы в них было переменное количество параметров и в то же время можно было бы вызывать функцию без параметра не встречал. Подскажите, пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2014, 19:12     Подскажите пример функции с переменным числом параметров, в том числе 0
Посмотрите здесь:

C++ функции с переменным числом параметров
C++ функции, с переменным числом параметров
C++ Функции с переменным числом параметров
Функции с переменным числом параметров C++
Работа функции с переменным числом параметров C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
05.07.2014, 19:22     Подскажите пример функции с переменным числом параметров, в том числе 0 #2
LostDok, если ты имеешь ввиду функции с эллипсисом (вроде printf), то там в любом случае нужно каким то образом отдельно передавать количество аргументов, т.е. как минимум один параметр у такой функции будет.
Можно добавить перегрузку без аргументов.
Можно шаблон функции с переменным количеством параметров.
lawr
 Аватар для lawr
352 / 246 / 121
Регистрация: 09.05.2014
Сообщений: 743
05.07.2014, 19:23     Подскажите пример функции с переменным числом параметров, в том числе 0 #3
речь о перегрузке функции или о чем? О_о
LostDok
 Аватар для LostDok
0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 49
05.07.2014, 19:29  [ТС]     Подскажите пример функции с переменным числом параметров, в том числе 0 #4
Задание было поставлено так, как описано выше. Сам, если честно, до конца не понимаю о чем речь. Но что-то мне говорит, что не о перегрузке, потому как это было бы слишком просто. Имеется ввиду функция, которая может принимать от 0 до бесконечности параметров.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.07.2014, 19:34     Подскажите пример функции с переменным числом параметров, в том числе 0 #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
#include <iostream>
 
int g(int c)
{
    std::cout << "param count=" << c << std::endl;  
}
 
void f() 
{
    g(0);
}
 
template<typename... Args>
void f(Args... args)
{
    g( sizeof...(args) );
}
 
int main() {
 
    f(); 
    f(123);
    f(1, "string" );
    f(0, "hoho", 100500.42 );
    return 0;
}
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
05.07.2014, 19:40     Подскажите пример функции с переменным числом параметров, в том числе 0 #6
LostDok, можно написать функцию с эллипсисом, которая будет принимать сколько угодно аргументов, но толку от нее не будет, т.к. не будет информации о количестве переданных параметров.
Пример с перегрузкой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
 
int foo() {
    return 1;
}
 
int foo(int, ...) {
    return 2;
}
 
 
int main() {
    std::cout << foo() << std::endl;
    std::cout << foo(1) << std::endl;
    std::cout << foo(1, 2) << std::endl;
}
http://ideone.com/3FUM5u

С шаблоном ф-ии

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <cstddef>
 
 
template<typename ...Args>
std::size_t args_count(Args && ...) {
   return sizeof ...(Args);
}
 
 
int main() {
   std::cout << args_count() << std::endl;
   std::cout << args_count(1) << std::endl;
   std::cout << args_count(2, '2') << std::endl;
}
http://ideone.com/7VJI34
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
05.07.2014, 19:49     Подскажите пример функции с переменным числом параметров, в том числе 0 #7
не подскажете, как это в 6.0 впихнуть?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.07.2014, 20:22     Подскажите пример функции с переменным числом параметров, в том числе 0 #8
Retyrn0, если под 6.0 понимается студия или билдер, то никак
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 1
05.07.2014, 20:31     Подскажите пример функции с переменным числом параметров, в том числе 0 #9
Tulosba, а разве в 6.0 нету int foo(int, ...) {?
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
05.07.2014, 20:47     Подскажите пример функции с переменным числом параметров, в том числе 0 #10
Цитата Сообщение от Tulosba Посмотреть сообщение
никак
Студия...значит можно поизвращаться и изобрести велосипед)
Например в функцию передавать адрес массива [адрес/тип], а количество определять по адрес==NULL_)
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.07.2014, 22:35     Подскажите пример функции с переменным числом параметров, в том числе 0 #11
zss, если через variadic templates, то никак. Если через эллипсис, то конечно можно.

Добавлено через 1 минуту
Retyrn0, массив подразумевает однотипные элементы. Иначе это уже кортеж, который без c++11 тоже не сделать нормально.
LostDok
 Аватар для LostDok
0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 49
05.07.2014, 22:38  [ТС]     Подскажите пример функции с переменным числом параметров, в том числе 0 #12
Всем спасибо. Думаю, вариант с эллипсисом подойдет. Раньше не знал что это. Пошел изучать.
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
05.07.2014, 22:59     Подскажите пример функции с переменным числом параметров, в том числе 0 #13
Цитата Сообщение от Tulosba Посмотреть сообщение
массив подразумевает однотипные элементы
Порядок. И тип этого массива - структура:

C++
1
2
3
4
5
struct PARAM
{
   unsigned int addr;
   unsigned int type;
};
Первое число - адрес, второе -тип. Например, пусть 1 - signed int, 2 - unsigned int, 3 - char и т.д.

В зависимости от значения TYPE, выполняем явное преобразование типов. Например, если type=3, то (char*)addr. Не вижу никаких препятствий.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
05.07.2014, 23:13     Подскажите пример функции с переменным числом параметров, в том числе 0 #14
Цитата Сообщение от Retyrn0 Посмотреть сообщение
В зависимости от значения TYPE, выполняем явное преобразование типов
Тогда переменную type надо хранить как void*, а не целое беззнаковое. Иначе будут проблемы.
а вообще для этих целей есть такие инструменты как полиморфизм, пересмотр архитектуры, шаблоны, RTTI в конце концов.
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
05.07.2014, 23:32     Подскажите пример функции с переменным числом параметров, в том числе 0 #15
Цитата Сообщение от gromo Посмотреть сообщение
будут проблемы
Проблем не будет, если только размер не совпадёт, но в стандартной архитектуре порядок, хотя на счёт void* согласен. Но я не утверждал о том, что именно такая структура, а пытался подать саму идею.
Цитата Сообщение от gromo Посмотреть сообщение
а вообще для этих целей есть такие инструменты как полиморфизм, пересмотр архитектуры, шаблоны, RTTI в конце концов
Зачем бить блоху кувалдой, если можно всё сделать проще? К тому же, хотя я не уверен, такой подход может оказаться быстрее(не знаю как выполняются аналогичные задачи с помощью ваших ссылок). В некотором смысле мой пример можно приписать к полиморфизму...низкоуровневому. Плюс - минус)
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
05.07.2014, 23:35     Подскажите пример функции с переменным числом параметров, в том числе 0 #16
Retyrn0, ну шаблон-то точно будет не медленнее
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
06.07.2014, 00:50     Подскажите пример функции с переменным числом параметров, в том числе 0 #17
Цитата Сообщение от DrOffset Посмотреть сообщение
ну шаблон-то точно будет не медленнее
Не уверен, нужно тестить, но мне лень, так что верю)
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
06.07.2014, 00:59     Подскажите пример функции с переменным числом параметров, в том числе 0 #18
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Не уверен
Не будет он медленнее, шаблон функции это по сути генератор различных функций для различных параметров шаблона.
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
06.07.2014, 00:59     Подскажите пример функции с переменным числом параметров, в том числе 0 #19
Retyrn0, если предоставишь свой вариант без шаблона, то можно будет потом сравнить на независимой площадке.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2014, 01:20     Подскажите пример функции с переменным числом параметров, в том числе 0
Еще ссылки по теме:

C++ Функции с переменным числом параметров
Функции с переменным числом параметров C++
C++ Функции с переменным числом параметров

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

Или воспользуйтесь поиском по форуму:
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
06.07.2014, 01:20     Подскажите пример функции с переменным числом параметров, в том числе 0 #20
Ну да, шаблон быстрее, согласен. Но ведь вопрос не в том.
Цитата Сообщение от Retyrn0 Посмотреть сообщение
как это в 6.0 впихнуть?
Цитата Сообщение от Tulosba Посмотреть сообщение
если под 6.0 понимается студия или билдер, то никак
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Студия...значит можно поизвращаться и изобрести велосипед)
Например в функцию передавать адрес массива [адрес/тип], а количество определять по адрес==NULL_)
Зато мой способ динамический. Чего уж там, искусственный интеллект грядёт, с возможностью самосовершенствоваться и не только по принципу нейронных сетей - там только переменные, но ещё и функции эволюционировать будут
А с другой стороны, человечество не изобретёт искусственный интеллект до тех пор, пока не научится пользоваться естественным

Добавлено через 1 минуту
Утешительное явление - крашенная блондинка
Yandex
Объявления
06.07.2014, 01:20     Подскажите пример функции с переменным числом параметров, в том числе 0
Ответ Создать тему
Опции темы

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