Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
LostDok
0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 49
#1

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

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

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

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

Функции с переменным числом параметров - C++
Подскажите как работают функции с переменным числом параметров, как их составлять. Почитал немного в инете про это, кажется только больше...

Функции с переменным числом параметров - C++
Добрый день, уважаемые знатоки С++! Подскажите пожалуйста, что не правильно в моем коде? Необходимо написать функцию с переменным...

Функции с переменным числом параметров - C++
Прошу помочь знатоков С++ в решении задачи, т.к. только начал изучать данный язык. Решить задачу, используя функции с переменным...

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

Функции с переменным числом параметров - C++
Написать функцию sum с переменным числом параметров, которая находит сумму чисел типа int по формуле: S=a1*a2+a3*a4+a5*a6+. . . . . ...

23
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
05.07.2014, 19:22 #2
LostDok, если ты имеешь ввиду функции с эллипсисом (вроде printf), то там в любом случае нужно каким то образом отдельно передавать количество аргументов, т.е. как минимум один параметр у такой функции будет.
Можно добавить перегрузку без аргументов.
Можно шаблон функции с переменным количеством параметров.
0
lawr
367 / 261 / 124
Регистрация: 09.05.2014
Сообщений: 769
05.07.2014, 19:23 #3
речь о перегрузке функции или о чем? О_о
0
LostDok
0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 49
05.07.2014, 19:29  [ТС] #4
Задание было поставлено так, как описано выше. Сам, если честно, до конца не понимаю о чем речь. Но что-то мне говорит, что не о перегрузке, потому как это было бы слишком просто. Имеется ввиду функция, которая может принимать от 0 до бесконечности параметров.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
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
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
05.07.2014, 19:49 #7
не подскажете, как это в 6.0 впихнуть?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
05.07.2014, 20:22 #8
Retyrn0, если под 6.0 понимается студия или билдер, то никак
0
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,870
Завершенные тесты: 1
05.07.2014, 20:31 #9
Tulosba, а разве в 6.0 нету int foo(int, ...) {?
0
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
05.07.2014, 20:47 #10
Цитата Сообщение от Tulosba Посмотреть сообщение
никак
Студия...значит можно поизвращаться и изобрести велосипед)
Например в функцию передавать адрес массива [адрес/тип], а количество определять по адрес==NULL_)
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
05.07.2014, 22:35 #11
zss, если через variadic templates, то никак. Если через эллипсис, то конечно можно.

Добавлено через 1 минуту
Retyrn0, массив подразумевает однотипные элементы. Иначе это уже кортеж, который без c++11 тоже не сделать нормально.
0
LostDok
0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 49
05.07.2014, 22:38  [ТС] #12
Всем спасибо. Думаю, вариант с эллипсисом подойдет. Раньше не знал что это. Пошел изучать.
0
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
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
gromo
371 / 270 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
05.07.2014, 23:13 #14
Цитата Сообщение от Retyrn0 Посмотреть сообщение
В зависимости от значения TYPE, выполняем явное преобразование типов
Тогда переменную type надо хранить как void*, а не целое беззнаковое. Иначе будут проблемы.
а вообще для этих целей есть такие инструменты как полиморфизм, пересмотр архитектуры, шаблоны, RTTI в конце концов.
0
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
05.07.2014, 23:32 #15
Цитата Сообщение от gromo Посмотреть сообщение
будут проблемы
Проблем не будет, если только размер не совпадёт, но в стандартной архитектуре порядок, хотя на счёт void* согласен. Но я не утверждал о том, что именно такая структура, а пытался подать саму идею.
Цитата Сообщение от gromo Посмотреть сообщение
а вообще для этих целей есть такие инструменты как полиморфизм, пересмотр архитектуры, шаблоны, RTTI в конце концов
Зачем бить блоху кувалдой, если можно всё сделать проще? К тому же, хотя я не уверен, такой подход может оказаться быстрее(не знаю как выполняются аналогичные задачи с помощью ваших ссылок). В некотором смысле мой пример можно приписать к полиморфизму...низкоуровневому. Плюс - минус)
0
05.07.2014, 23:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2014, 23:32
Привет! Вот еще темы с ответами:

Функции с переменным числом параметров - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; int max(int k,...) { int *p=&amp;k; int maxi; for(;k!=0;k--)

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

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

Функции с переменным числом параметров - C++
Функция должна принимать переменное количество аргументов, последним из которых является 0, и скажем просто их печатает. Делаю по примеру...


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

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

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