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

C++

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

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

11.09.2011, 00:46. Просмотров 3911. Ответов 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++ Функция с переменным количеством параметров-оъектов
Странное поведение функции с переменным количеством аргументов C++ WinAPI
C++ Builder Функции с переменным количеством параметров
C++ Функции с переменным количеством параметров, stdarg.h. Исправить код
Функция с переменным количеством параметров C++
C++ Шаблон с переменным количеством параметров
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SalterOk
115 / 112 / 1
Регистрация: 02.06.2011
Сообщений: 280
13.09.2011, 19:24  [ТС]     функции с переменным количеством параметров #21
Цитата Сообщение от outoftime Посмотреть сообщение
Прочтите литературу еще раз или глубже.
какую? там где новый стандарт описывается? - в MSVC еще не реализован.
в старом (может плохо смотрел конечно) подобного нет
если не сложно - название?
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 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);
}
SalterOk
115 / 112 / 1
Регистрация: 02.06.2011
Сообщений: 280
13.09.2011, 22:52  [ТС]     функции с переменным количеством параметров #23
тоже вариант но я все же подожду лучших времен(соответствие стандарту)
а пока и с первым параметром пойдет
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
13.09.2011, 22:58     функции с переменным количеством параметров #24
Цитата Сообщение от SalterOk Посмотреть сообщение
а пока и с первым параметром пойдет
лучше подождать списки инициализации, в студии если не путаю они уже работают
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.09.2011, 23:19     функции с переменным количеством параметров #25
alex_x_x, в студии нет, только в gcc.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
14.09.2011, 02:03     функции с переменным количеством параметров #26
у меня всего один, похожий на троллинг вопрос: зОчем юзать студию?
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
14.09.2011, 15:30     функции с переменным количеством параметров #27
niXman, зачем что она удобная и простая, нет?
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
14.09.2011, 17:46     функции с переменным количеством параметров #28
SalterOk, поступите правильно и сделайте одномерный массив. Для создания двумерного массива надо сделать массив массивов, трехмерного - массив массивов массивов.... и т.д. Не морочьте себе голову почем зря. Все это реализуется через единственный класс и пару typedef'ов.
SalterOk
115 / 112 / 1
Регистрация: 02.06.2011
Сообщений: 280
14.09.2011, 18:46  [ТС]     функции с переменным количеством параметров #29
Цитата Сообщение от fasked Посмотреть сообщение
SalterOk, поступите правильно и сделайте одномерный массив
ну я внутри класса так и делаю (просто пользователь работает как с многомерным массивом а внутри все сводится к подсчету индекса в одномерном массиве)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2011, 18:59     функции с переменным количеством параметров
Еще ссылки по теме:

Массив в функции с переменным количеством параметров C++
Функции с переменным количеством параметров в языке C ++ C++
Функция с переменным количеством параметров C++
C++ шаблон функции с переменным количеством аргументов
C++ Функция суммы с переменным количеством параметров

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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 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;
Yandex
Объявления
14.09.2011, 18:59     функции с переменным количеством параметров
Ответ Создать тему
Опции темы

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