![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| SP |
|
|||
|
Unregistered |
Хочется иметь для string что-то типа sprintf.
В принципе можно было бы написать свою функцию-обертку вокруг sprintf, но никак не могу сообразить как передать внутрь функции неизвестное количество параметров переданное в текущую функцию. Т.е. есть 2 функции void A ( string AAA, ... ) { } void B ( string AAA, ... ) { тут нужен вызоа А, но как ? } Читал документацию, читал страуструпа... не помогает. |
|||
|
||||
| gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
вот пример функции с переменным число параметров на C++ Builder
void OpenQuerySQL(TIBQuery *qu, AnsiString QueryString, bool OpenQuery, bool StartTransaction, int NParams, ...) { //функция заменяет запрос в компоненте IBQuery на переданную строку //и заносит значения параметров va_list ap; bool Ind=true; qu->Close(); //завершаем транзакцию, если она активна if(StartTransaction && qu->Transaction->Active) try { qu->Transaction->Commit(); } catch(...) { try {qu->Transaction->Rollback();} catch(...) {} qu->Transaction->Active = false; } //очищаем запрос if(QueryString != "") { qu->SQL->Clear(); qu->SQL->Add(QueryString); } //заполняем значения параметров в запросе va_start(ap, NParams); for(int i=0; i<NParams; i++) { qu->Params->Items[i]->AsString = va_arg(ap, AnsiString); } va_end(ap); if(OpenQuery) for(int i=0; i<NParams; i++) { //если хотя бы один параметр пустой, то выходим из функции if(qu->Params->Items[i]->AsString == "") { Ind = false; break; } } if(StartTransaction) qu->Transaction->StartTransaction(); if(Ind && OpenQuery) qu->Open(); } делюсь -------------------- С уважением. Gray. |
|||
|
||||
| gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
сорри, тут должнго быть так
if(OpenQuery) for(int i=0; i<qu->ParamCount; i++) { //если хотя бы один параметр пустой, то выходим из функции if(qu->Params->Items[i]->AsString == "") { Ind = false; break; } } -------------------- С уважением. Gray. |
|||
|
||||
| SP |
|
|||
|
Unregistered |
Это понятно.
Вопрос в другом. Как передать этот список в следующую функцию. Воспользоваться я умею, не умею передать. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |