Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> функция с переменным числом параметров 
:(
    Опции темы
ИванМ
Дата 3.6.2011, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Как в функцию вида func(size_t n, ...) передать неизвестное на момент компиляции число аргументов? Я кроме ассемблерных вставок ни до чего не додумался.
PM MAIL   Вверх
azesmcar
Дата 3.6.2011, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(ИванМ @  3.6.2011,  20:50 Найти цитируемый пост)
Как в функцию вида func(size_t n, ...) передать неизвестное на момент компиляции число аргументов?

Давай подробнее о задаче.
PM   Вверх
ИванМ
Дата 3.6.2011, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Нужно интерпретированное выражение вида
кол-во
тип1
значение1
тип2
значение2
...
типn
значениеn

передать в функцию.
Т.е. на момент компилирования программы, мы не знаем каким будет это интерпретированное выражение поэтому не можем написать
func(size_t n, тип1, значение1, тип2, значени2, ... типn, значениеn), т.к. n неизветсно.
Если передавать вторым параметром структуру, то тоже непонятно как, т.к. размер структуры должен быть тоже заранее известен. 
PM MAIL   Вверх
azesmcar
Дата 3.6.2011, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(ИванМ @  3.6.2011,  21:10 Найти цитируемый пост)
Если передавать вторым параметром структуру, то тоже непонятно как, т.к. размер структуры должен быть тоже заранее известен.  

а что мешает запихнуть это все в контейнер и передать в функцию?
PM   Вверх
ИванМ
Дата 3.6.2011, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Думаю еще вариант через vector, но он вроде содержит доп. поля.

Добавлено через 49 секунд
azesmcar, ты меня опередил. Вроде контейнеры содержат доп. информацию.
PM MAIL   Вверх
azesmcar
Дата 3.6.2011, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(ИванМ @  3.6.2011,  21:11 Найти цитируемый пост)
Думаю еще вариант через vector, но он вроде содержит доп. поля. 

в каком смысле?
PM   Вверх
ИванМ
Дата 3.6.2011, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Мне нужно именно через такую функцию func(size_t n, ...).
PM MAIL   Вверх
azesmcar
Дата 3.6.2011, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(ИванМ @  3.6.2011,  21:13 Найти цитируемый пост)
Мне нужно именно через такую функцию func(size_t n, ...). 

Вот я и спрашиваю почему?
PM   Вверх
ИванМ
Дата 3.6.2011, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Имею ввиду, что если передать
func(size_t n, vector<T>), то в функцию передастся мусор, кот. содержится в векторе помимо самих данных.

PM MAIL   Вверх
azesmcar
Дата 3.6.2011, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(ИванМ @  3.6.2011,  21:14 Найти цитируемый пост)
func(size_t n, vector<T>), то в функцию передастся мусор, кот. содержится в векторе помимо самих данных.

1. какой еще мусор? откуда он там появился?
2. пусть даже так, почему тебя это волнует?
3. кто мешает написать свой контейнер, или в крайнем случае запихнуть все в обыкновенный массив (заметь, я сказал не вектор а контейнер)?
PM   Вверх
ИванМ
Дата 3.6.2011, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Почему.
На самом деле контейнеры вообще никак нельзя передавать иначе я вернусь к тому, откуда пришел.
Дело в том, что когда я передавал контейнеры, это занимало много времени в момент интерпретации при копировании их из одного места в другое. Поэтому я решил передавать напрямую через стек.
PM MAIL   Вверх
azesmcar
Дата 3.6.2011, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(ИванМ @  3.6.2011,  21:17 Найти цитируемый пост)
Дело в том, что когда я передавал контейнеры, это занимало много времени в момент интерпретации при копировании их из одного места в другое. Поэтому я решил передавать напрямую через стек. 

А зачем копировал? Передавай по ссылке. И потом какая разница что копировать? Я не понимаю твоей проблемы, описывай подробнее.

Это сообщение отредактировал(а) azesmcar - 3.6.2011, 21:18
PM   Вверх
ИванМ
Дата 3.6.2011, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Я передавал по ссылке.
Например есть набор разнородных данных, которые надо вытащить и передать в функцию.
Я делал как. Создавал вектор, складывая туда все эти нужные мне данные, и потом его передавал по ссылке. Но это жрет много вычислительных ресурсов при больших вычислениях.
PM MAIL   Вверх
azesmcar
Дата 3.6.2011, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(ИванМ @  3.6.2011,  21:21 Найти цитируемый пост)
надо вытащить и передать в функцию

Откуда вытащить?
PM   Вверх
ИванМ
Дата 3.6.2011, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



azesmcar, из другого контейнера.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.