Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
plapteshk
74 / 25 / 22
Регистрация: 22.06.2013
Сообщений: 123
1

Передача переменного числа параметров в другую функцию

19.08.2017, 15:14. Просмотров 694. Ответов 6
Метки нет (Все метки)

Есть две функции принимающие переменное число параметров
C++
1
2
3
int LoadFromFile(UnicodeString Filename, const char *format, ...);
 
int LoadFromResource(UnicodeString ResName, const char *format, ...);
Как из из этих функций вызвать эту, и передать в нее параметры?

C++
1
int Load(const char *format, ...);
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2017, 15:14
Ответы с готовыми решениями:

Передача переменного числа параметров
Возможно ли вызвать функцию с переменным числом параметров из функции с переменным числом...

Передача неопределённого числа параметров в функцию
Здравствуйте! Спасите меня уже в который раз, не могу решить,хоть тресни::wall: Вся надежда на...

Передача неопределенного числа параметров в функцию
В общем вот программка реализовано так,чтобы узнать когда конец переданных параметров, последним...

Передача многомерного массива переменного размера в функцию
Как в с передается в функцию многомерный массив, чья размерность определеяется "по ходу дела"....

Передача массивов и параметров с одной функции в другую
Здравствуйте. Я пишу программу, она состоит из множества функций. И у меня возникло море вопросов....

6
Quaentor
18 / 17 / 16
Регистрация: 04.07.2017
Сообщений: 36
19.08.2017, 16:02 2
Цитата Сообщение от plapteshk Посмотреть сообщение
Как из из этих функций вызвать эту, и передать в нее параметры?
сделать их шаблонными
C++
1
2
3
4
5
6
template<typename...T>
int LoadFromFile(UnicodeString Filename, const char *format, T... args)
{
    Load(format, args...);
    return 0;
}
0
hoggy
Эксперт С++
7082 / 3288 / 677
Регистрация: 15.11.2014
Сообщений: 7,526
Завершенные тесты: 1
19.08.2017, 17:05 3
Цитата Сообщение от plapteshk Посмотреть сообщение
Как из из этих функций вызвать эту, и передать в нее параметры?
1.
передавать va_list

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQLITE_API char *sqlite3_vmprintf(const char*, va_list);
 
// ...
 
void CMail::Compose(const char* msg,...)
{
    if(msg==NULL||m_mail==NULL) return;
 
    va_list arg_ptr;
    va_start(arg_ptr, msg); 
    char *mail=sqlite3_vmprintf(msg,arg_ptr);    //<--- см сюда
    va_end(arg_ptr);
        //... всякий код
}

2.
использовать шаблоны с переменным количеством аргументов.

Цитата Сообщение от Quaentor Посмотреть сообщение
int LoadFromFile(UnicodeString Filename, const char *format, T... args)
никогда так не делайте.

либо так:

C++
1
2
3
4
5
6
7
//const Args&... args ---> только для чтения
 
template<typename...Args>
int LoadFromFile(UnicodeString Filename, const char *format, const Args&... args)  
{
    return Load(format, args...);
}
либо так:

C++
1
2
3
4
5
6
7
8
// Args&&... args ---> оптимальная передача аргументов
 
template<typename...Args>
int LoadFromFile(UnicodeString Filename, const char *format, Args&&... args) 
{
    return Load(format, std::forward<Args>(args)...);  //<--- забудете про форвард,
       // попрощаетесь с move-семантикой перемещения.
}
3
anapshy
255 / 236 / 199
Регистрация: 14.11.2016
Сообщений: 890
Завершенные тесты: 3
19.08.2017, 17:30 4
hoggy, здравствуйте, есть учебники по С/С++ где можно подробно прочесть с примерами использования этих макросов >> va_list, va_end, va_arg, ... ?
Если знаете - отпишите, спасибо
0
hoggy
Эксперт С++
7082 / 3288 / 677
Регистрация: 15.11.2014
Сообщений: 7,526
Завершенные тесты: 1
19.08.2017, 17:37 5
Цитата Сообщение от anapshy Посмотреть сообщение
здравствуйте, есть учебники по С/С++ где можно подробно прочесть с примерами использования этих макросов >> va_list, va_end, va_arg, ... ?
Если знаете - отпишите, спасибо
привет, отписался, не за что
0
anapshy
255 / 236 / 199
Регистрация: 14.11.2016
Сообщений: 890
Завершенные тесты: 3
19.08.2017, 17:42 6
hoggy, вы так любезны
0
Evg
Эксперт CАвтор FAQ
20336 / 7861 / 604
Регистрация: 30.03.2009
Сообщений: 21,924
Записей в блоге: 30
20.08.2017, 17:26 7
Цитата Сообщение от plapteshk Посмотреть сообщение
Как из из этих функций вызвать эту, и передать в нее параметры?
В том виде, в котором ты описал прототипы - никак. Но можно сделать va_start и указатель на список параметров передать в Load, по примеру того, как это делается в функциях типа vfprintf
0
20.08.2017, 17:26
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2017, 17:26

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

Передача параметров в функцию
Добрый вечер Не получается передать в функцию массив выдает ошибку #include &lt;cstdio&gt; struct...

Передача параметров в функцию
Помогите пожалуйста сделать лабораторную по ЯП. // Лабораторная работа 2 // тема &quot;Передача...


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

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

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