Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 49
1

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

05.07.2014, 19:12. Показов 1913. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Подскажите, пожалуйста, пример функции на С++, которая имела бы переменное количество параметров, в том числе 0. Функции с переменным количеством параметров на С++ есть, знаю. А вот такие, чтобы в них было переменное количество параметров и в то же время можно было бы вызывать функцию без параметра не встречал. Подскажите, пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2014, 19:12
Ответы с готовыми решениями:

Функции с переменным числом параметров
#include <iostream.h> #include <conio.h> int max(int k,...) { int *p=&k; int maxi; ...

«Функции с переменным числом параметров»
И ещё 1на просьба :-[ В этом случае удобно использовать цикл do while, так как указатель p сразу...

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

Функции с переменным числом параметров
Написать функцию mult с переменным числом параметров, которая находит произведение чисел типа...

23
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
05.07.2014, 19:22 2
LostDok, если ты имеешь ввиду функции с эллипсисом (вроде printf), то там в любом случае нужно каким то образом отдельно передавать количество аргументов, т.е. как минимум один параметр у такой функции будет.
Можно добавить перегрузку без аргументов.
Можно шаблон функции с переменным количеством параметров.
0
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
05.07.2014, 19:23 3
речь о перегрузке функции или о чем? О_о
0
0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 49
05.07.2014, 19:29  [ТС] 4
Задание было поставлено так, как описано выше. Сам, если честно, до конца не понимаю о чем речь. Но что-то мне говорит, что не о перегрузке, потому как это было бы слишком просто. Имеется ввиду функция, которая может принимать от 0 до бесконечности параметров.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.07.2014, 19:34 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;
}
2
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
05.07.2014, 19:40 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
2
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
05.07.2014, 19:49 7
не подскажете, как это в 6.0 впихнуть?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.07.2014, 20:22 8
Retyrn0, если под 6.0 понимается студия или билдер, то никак
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
05.07.2014, 20:31 9
Tulosba, а разве в 6.0 нету int foo(int, ...) {?
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
05.07.2014, 20:47 10
Цитата Сообщение от Tulosba Посмотреть сообщение
никак
Студия...значит можно поизвращаться и изобрести велосипед)
Например в функцию передавать адрес массива [адрес/тип], а количество определять по адрес==NULL_)
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.07.2014, 22:35 11
zss, если через variadic templates, то никак. Если через эллипсис, то конечно можно.

Добавлено через 1 минуту
Retyrn0, массив подразумевает однотипные элементы. Иначе это уже кортеж, который без c++11 тоже не сделать нормально.
0
0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 49
05.07.2014, 22:38  [ТС] 12
Всем спасибо. Думаю, вариант с эллипсисом подойдет. Раньше не знал что это. Пошел изучать.
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
05.07.2014, 22:59 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. Не вижу никаких препятствий.
0
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
05.07.2014, 23:13 14
Цитата Сообщение от Retyrn0 Посмотреть сообщение
В зависимости от значения TYPE, выполняем явное преобразование типов
Тогда переменную type надо хранить как void*, а не целое беззнаковое. Иначе будут проблемы.
а вообще для этих целей есть такие инструменты как полиморфизм, пересмотр архитектуры, шаблоны, RTTI в конце концов.
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
05.07.2014, 23:32 15
Цитата Сообщение от gromo Посмотреть сообщение
будут проблемы
Проблем не будет, если только размер не совпадёт, но в стандартной архитектуре порядок, хотя на счёт void* согласен. Но я не утверждал о том, что именно такая структура, а пытался подать саму идею.
Цитата Сообщение от gromo Посмотреть сообщение
а вообще для этих целей есть такие инструменты как полиморфизм, пересмотр архитектуры, шаблоны, RTTI в конце концов
Зачем бить блоху кувалдой, если можно всё сделать проще? К тому же, хотя я не уверен, такой подход может оказаться быстрее(не знаю как выполняются аналогичные задачи с помощью ваших ссылок). В некотором смысле мой пример можно приписать к полиморфизму...низкоуровневому. Плюс - минус)
0
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
05.07.2014, 23:35 16
Retyrn0, ну шаблон-то точно будет не медленнее
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
06.07.2014, 00:50 17
Цитата Сообщение от DrOffset Посмотреть сообщение
ну шаблон-то точно будет не медленнее
Не уверен, нужно тестить, но мне лень, так что верю)
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
06.07.2014, 00:59 18
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Не уверен
Не будет он медленнее, шаблон функции это по сути генератор различных функций для различных параметров шаблона.
0
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
06.07.2014, 00:59 19
Retyrn0, если предоставишь свой вариант без шаблона, то можно будет потом сравнить на независимой площадке.
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
06.07.2014, 01:20 20
Ну да, шаблон быстрее, согласен. Но ведь вопрос не в том.
Цитата Сообщение от Retyrn0 Посмотреть сообщение
как это в 6.0 впихнуть?
Цитата Сообщение от Tulosba Посмотреть сообщение
если под 6.0 понимается студия или билдер, то никак
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Студия...значит можно поизвращаться и изобрести велосипед)
Например в функцию передавать адрес массива [адрес/тип], а количество определять по адрес==NULL_)
Зато мой способ динамический. Чего уж там, искусственный интеллект грядёт, с возможностью самосовершенствоваться и не только по принципу нейронных сетей - там только переменные, но ещё и функции эволюционировать будут
А с другой стороны, человечество не изобретёт искусственный интеллект до тех пор, пока не научится пользоваться естественным

Добавлено через 1 минуту
Утешительное явление - крашенная блондинка
0
06.07.2014, 01:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.07.2014, 01:20
Помогаю со студенческими работами здесь

Функции с переменным числом параметров
Такая проблема есть код который должен выводить поочередно цифры, 1 2 3 4 5, я пытаюсь...

Функции с переменным числом параметров
Написать функцию max с переменным числом параметров, которая находит минимальное из чисел типа int...

Функции с переменным числом параметров
Написать функцию sum с переменным числом параметров, которая находит сумму чисел типа int по...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru