Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.96/23: Рейтинг темы: голосов - 23, средняя оценка - 4.96
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
1

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

11.09.2011, 00:46. Просмотров 4518. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.09.2011, 00:46
Ответы с готовыми решениями:

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

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

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

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

29
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
13.09.2011, 19:24  [ТС] 21
Цитата Сообщение от outoftime Посмотреть сообщение
Прочтите литературу еще раз или глубже.
какую? там где новый стандарт описывается? - в MSVC еще не реализован.
в старом (может плохо смотрел конечно) подобного нет
если не сложно - название?
0
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
13.09.2011, 19:59 22
мне кажется максимум можно сделать так
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
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
13.09.2011, 22:52  [ТС] 23
тоже вариант но я все же подожду лучших времен(соответствие стандарту)
а пока и с первым параметром пойдет
0
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
13.09.2011, 22:58 24
Цитата Сообщение от SalterOk Посмотреть сообщение
а пока и с первым параметром пойдет
лучше подождать списки инициализации, в студии если не путаю они уже работают
1
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
13.09.2011, 23:19 25
alex_x_x, в студии нет, только в gcc.
0
Эксперт С++
3209 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
14.09.2011, 02:03 26
у меня всего один, похожий на троллинг вопрос: зОчем юзать студию?
0
591 / 529 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
14.09.2011, 15:30 27
niXman, зачем что она удобная и простая, нет?
0
Эксперт С++
5015 / 2594 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
14.09.2011, 17:46 28
SalterOk, поступите правильно и сделайте одномерный массив. Для создания двумерного массива надо сделать массив массивов, трехмерного - массив массивов массивов.... и т.д. Не морочьте себе голову почем зря. Все это реализуется через единственный класс и пару typedef'ов.
0
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
14.09.2011, 18:46  [ТС] 29
Цитата Сообщение от fasked Посмотреть сообщение
SalterOk, поступите правильно и сделайте одномерный массив
ну я внутри класса так и делаю (просто пользователь работает как с многомерным массивом а внутри все сводится к подсчету индекса в одномерном массиве)
0
Эксперт С++
5015 / 2594 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
14.09.2011, 18:59 30
Цитата Сообщение от SalterOk Посмотреть сообщение
просто пользователь работает как с многомерным массивом а внутри все сводится к подсчету индекса в одномерном массиве
Если это все делается в целях экономии памяти и увеличения скорости обработки, то честь Вам и хвала. Если же нет, то гораздо удобнее делать так:
C++
1
2
3
4
5
template <typename T>
class Array;
 
Array<Array<int> > array2d;
Array<Array<Array<int> > > array3d;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2011, 18:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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

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

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


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

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

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