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

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.91
SalterOk
115 / 112 / 1
Регистрация: 02.06.2011
Сообщений: 280
#1

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

11.09.2011, 00:46. Просмотров 3930. Ответов 29
Метки нет (Все метки)

для некоторого класса необходимо чтобы его конструктор принимал переменное количество параметров.
как это делается - понятно.
я использую va_list и т.д. из varargs.h
сложность возникла в том что с ее помощью нельзя узнать сколько параметров было передано
сейчас я делаю так
C++
1
2
3
4
5
    AddToList(frst);
va_list ap;
va_start(ap,frst);
while (AddToList(va_arg(ap,int)) > 0);
va_end(ap);
пока параметры больше нуля они добавляются в список с помощью AddToList(int);
но после последнего переданого параметра va_arg возвращает случайное число(наверно тож со стека)
его конечно можно отсеять проверкой на малый диапазов(обычно этот "мусор" очень большой по модулю) но есть вероятность что попадется малое значение и запишется в список - а это очень плохо!
собственно вопрос:
можно ли вообще как-то узнать сколько параметров было передано или еще каким-то образом правильно отсеять мусор?

P.S. как замену можно конечно первым параметром передавать количество аргументов(это все-же лучше чем случайный мусор) но тоже не очень удобно и надежно(можно не правильное количество передать и хотелось бы чтоб пользователь класса вообще не задумывался о количестве аргументов)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2011, 00:46     функции с переменным количеством параметров
Посмотрите здесь:

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

Функции с переменным количеством параметров - C++ Builder
Прописываю в заголовке: void __fastcall TestClass::Test(int x, ...); компилятор выдает ошибку: Conflicting type modifiers В C++...

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

Функции с переменным количеством параметров в языке C ++ - C++
Реализовать функцию конкатенации (сцепления) произвольного количества C-строк с динамическим изменением длины результирующей строки.

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

Функции с переменным количеством параметров, stdarg.h. Исправить код - C++
Почему не работает? В итоге получается 0, а если в функции все что надо заменить с float на int, то работает правильно. В чем ошибка? ...

Функция с переменным количеством параметров - C++
Доброго времени суток! Я озадачился таким вопросом - как производится компиляция функций с переменным числом параметров? Компилятор создаёт...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2011, 01:10     функции с переменным количеством параметров #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
template<typename... T>
void func(const T&... args) {
   std::cout << sizeof...(args) << std::endl;
}
 
int main() {
   func();
   func(1);
   func(1,2);
   func(1,2,3);
}
http://liveworkspace.org/code/e7e122...6c312722b598ed
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.09.2011, 08:22     функции с переменным количеством параметров #3
Цитата Сообщение от niXman Посмотреть сообщение
typename...
Жаль, что такие вкусняшки почти никем пока не поддерживаются.(
SalterOk
115 / 112 / 1
Регистрация: 02.06.2011
Сообщений: 280
11.09.2011, 13:38  [ТС]     функции с переменным количеством параметров #4
Цитата Сообщение от Deviaphan Посмотреть сообщение
Жаль, что такие вкусняшки почти никем пока не поддерживаются.(
да очень жаль - так как мой компилятор(VS 2010) не понимает такой записи
в любом случае спасибо
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2011, 14:32     функции с переменным количеством параметров #5
Deviaphan, SalterOk, могу только посочувствовать.
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
11.09.2011, 15:40     функции с переменным количеством параметров #6
Все Microsoft-кие компилеры не поддерживают такую конструкцию, не нужно злоупотреблять этим.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
11.09.2011, 16:03     функции с переменным количеством параметров #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от xAtom Посмотреть сообщение
Все Microsoft-кие компилеры не поддерживают такую конструкцию, не нужно злоупотреблять этим
Не уж то первая половина фразы является причиной для принятия во внимание второй её половины? Стандарт принят, в стандарте есть шаблоны с переменным числом аргументов, и в последних gcc компиляторах они реализованы. То, что этого ещё не сделал Microsoft - только его проблемы.

Не по теме:

P.S. Сам юзаю студию, но в дополнение к ней всегда есть свеженькая версия mingw.

niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2011, 18:52     функции с переменным количеством параметров #8
Цитата Сообщение от xAtom Посмотреть сообщение
не нужно злоупотреблять этим.
естественно. не нужно злоупотреблять такими компилерами.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
11.09.2011, 18:58     функции с переменным количеством параметров #9
Цитата Сообщение от silent_1991 Посмотреть сообщение
То, что этого ещё не сделал Microsoft - только его проблемы.
виндузовые проекты как правило ведут на msvc, так что логично учитывать возможности компилятора
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2011, 19:03     функции с переменным количеством параметров #10
Цитата Сообщение от alex_x_x Посмотреть сообщение
виндузовые проекты как правило ведут на msvc
никогда такого не замечал...

ладно, прекращаем оффтопить.
-=ЮрА=-
Заблокирован
Автор FAQ
12.09.2011, 14:06     функции с переменным количеством параметров #11
Цитата Сообщение от SalterOk Посмотреть сообщение
для некоторого класса необходимо чтобы его конструктор принимал переменное количество параметров.
как это делается - понятно.
я использую va_list и т.д. из varargs.h
сложность возникла в том что с ее помощью нельзя узнать сколько параметров было передано
сейчас я делаю так
- недаром в printf и scanf есть строка формата аля "d%s%p" - посчитали сколько параметров приводить надо(в данном случае 3) и юзаем va_list. Вели в функцию в качестве доп аргумента строку формата и отталкиваемся от числа параметров в ней в чём проблема то????
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.09.2011, 14:14     функции с переменным количеством параметров #12
Если параметров не много и их типы постоянны, то можно использовать конструктор с параметрами по умолчанию.

Использовать (...) в конструкторе, ИМО, не кошерно.)
SalterOk
115 / 112 / 1
Регистрация: 02.06.2011
Сообщений: 280
12.09.2011, 16:52  [ТС]     функции с переменным количеством параметров #13
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
недаром в printf и scanf есть строка формата аля "d%s%p" - посчитали сколько параметров приводить надо(в данном случае 3) и юзаем va_list. Вели в функцию в качестве доп аргумента строку формата и отталкиваемся от числа параметров в ней в чём проблема то????
мне это не совсем подходит так как это по сути обвертка над динамическим массивом разного размера, глубины и типа.
а в конструктор собственно и передается информация о размерах и количестве
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.09.2011, 16:58     функции с переменным количеством параметров #14
Цитата Сообщение от SalterOk Посмотреть сообщение
бвертка над динамическим массивом разного размера
Так может стоит использовать std::vector?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2011, 16:59     функции с переменным количеством параметров
Еще ссылки по теме:

Функция с переменным количеством параметров - C++
Здравствуйте, возникла вот такая проблема: создаю функцию с переменным кол-ом параметров. Пример сделан мною по аналогии с...

Шаблон с переменным количеством параметров - C++
У меня компилятор Visual Studio 2012, но не работает следующий код: #include &lt;iostream&gt; #include &lt;string&gt; void show_list() {} ...

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

Функция суммы с переменным количеством параметров - C++
На просторах форума нашёл код. Стало интересно посмотреть что выводят его отдельные части(отдельно переменная t, sum одного из аргументов и...

Шаблон функции с переменным количеством аргументов - C++
Добрый вечер, мне необходимо при помощи шаблона функции реализовать поиск минимального числа(тип данных не известен, количество чисел...


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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
12.09.2011, 16:59     функции с переменным количеством параметров #15
Цитата Сообщение от SalterOk Посмотреть сообщение
а в конструктор собственно и передается информация о размерах и количестве
- как вариант передавай первым аргументом число аргументов и всё
Yandex
Объявления
12.09.2011, 16:59     функции с переменным количеством параметров
Ответ Создать тему
Опции темы

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