Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/27: Рейтинг темы: голосов - 27, средняя оценка - 4.74
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280

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

11.09.2011, 00:46. Показов 6172. Ответов 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. как замену можно конечно первым параметром передавать количество аргументов(это все-же лучше чем случайный мусор) но тоже не очень удобно и надежно(можно не правильное количество передать и хотелось бы чтоб пользователь класса вообще не задумывался о количестве аргументов)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.09.2011, 00:46
Ответы с готовыми решениями:

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

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

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

29
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
13.09.2011, 19:24  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от outoftime Посмотреть сообщение
Прочтите литературу еще раз или глубже.
какую? там где новый стандарт описывается? - в MSVC еще не реализован.
в старом (может плохо смотрел конечно) подобного нет
если не сложно - название?
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
13.09.2011, 19:59
мне кажется максимум можно сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
template <typename type, size_t N>
void f(type (&a)[N]) 
{
    for (size_t i = 0; i < N; ++i) 
    {
        // init array in your case
        std::cout << "[" << i << "] = " << a[i] << std::endl;
    }
}
 
int main()
{
   int arr[] = {1,2,3,4,5,6};
   func(arr);
}
1
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
13.09.2011, 22:52  [ТС]
тоже вариант но я все же подожду лучших времен(соответствие стандарту)
а пока и с первым параметром пойдет
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
13.09.2011, 22:58
Цитата Сообщение от SalterOk Посмотреть сообщение
а пока и с первым параметром пойдет
лучше подождать списки инициализации, в студии если не путаю они уже работают
1
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
13.09.2011, 23:19
alex_x_x, в студии нет, только в gcc.
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
14.09.2011, 02:03
у меня всего один, похожий на троллинг вопрос: зОчем юзать студию?
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
14.09.2011, 15:30
niXman, зачем что она удобная и простая, нет?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
14.09.2011, 17:46
SalterOk, поступите правильно и сделайте одномерный массив. Для создания двумерного массива надо сделать массив массивов, трехмерного - массив массивов массивов.... и т.д. Не морочьте себе голову почем зря. Все это реализуется через единственный класс и пару typedef'ов.
0
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
14.09.2011, 18:46  [ТС]
Цитата Сообщение от fasked Посмотреть сообщение
SalterOk, поступите правильно и сделайте одномерный массив
ну я внутри класса так и делаю (просто пользователь работает как с многомерным массивом а внутри все сводится к подсчету индекса в одномерном массиве)
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
14.09.2011, 18:59
Цитата Сообщение от SalterOk Посмотреть сообщение
просто пользователь работает как с многомерным массивом а внутри все сводится к подсчету индекса в одномерном массиве
Если это все делается в целях экономии памяти и увеличения скорости обработки, то честь Вам и хвала. Если же нет, то гораздо удобнее делать так:
C++
1
2
3
4
5
template <typename T>
class Array;
 
Array<Array<int> > array2d;
Array<Array<Array<int> > > array3d;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.09.2011, 18:59
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru