powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов функции c переменным числом параметров из функции с переменным числом параметров
10 сообщений из 10, страница 1 из 1
Вызов функции c переменным числом параметров из функции с переменным числом параметров
    #33853312
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем. Несколько пятничная тема...

Сделал небольшой класс-обертку для работы с event-ами Firebird. Есть там такая функция
Код: plaintext
1.
ISC_LONG isc_event_block(char **event_buffer,char **result_buffer,unsigned short id_count,...) ;

Соответствующий метод класса
Код: plaintext
1.
fbevents::fb_event_block(unsigned short id_count,...)

Вопрос: как из fb_event_block вызвать isc_event_block с тем же числом переменных параметров (все переменные параметры должны иметь тип char *)

Сразу напрашиваются три варианта:
1) Самому формировать event_buffer и result_buffer (Благо опенсорс)
2) Использовать inline ассемблер
3) Поскольку id_count не должно превышать 15, то использовать конструкцию switch

Каждый из этих вариантов имеет недостатки :
1) Теоретически, формат EPB может измениться.
2) Ну и так ясно.
3) Просто по уродски выглядит.

Есть у кого какие новые идеи на это счет?
...
Рейтинг: 0 / 0
Вызов функции c переменным числом параметров из функции с переменным числом параметров
    #33853531
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня была похожая ситуация с функцией ::FormatMessage , но у неё вместо ... стоит va_list * , и я смог её вызвать из собственной функции с ... с помощью va_start/va_end .

Так что если есть вариант isc_event_block с va_list , то можно вызвать его.

Правда, там написано, что
By default, the Arguments parameter is of type va_list*, which is a language- and implementation-specific data type for describing a variable number of arguments.
...
Рейтинг: 0 / 0
Вызов функции c переменным числом параметров из функции с переменным числом параметров
    #33853691
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой Вэй
Так что если есть вариант isc_event_block с va_list , то можно вызвать его.

Такого варианта данной функции нет, но можно попробовать попросить разработчиков его сделать :)
Собственно варианты 2 и 3 я уже вреднил (даже работает), но кривоватое решение данной задачи несколько напрягает и мешает чувству глубокого удовлетворения. Вот и интересуюсь, может у кого то есть идеи получше.
...
Рейтинг: 0 / 0
Вызов функции c переменным числом параметров из функции с переменным числом параметров
    #33854025
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6y Ой Вэй
Так что если есть вариант isc_event_block с va_list , то можно вызвать его.

Такого варианта данной функции нет, но можно попробовать попросить разработчиков его сделать :)
Собственно варианты 2 и 3 я уже вреднил (даже работает), но кривоватое решение данной задачи несколько напрягает и мешает чувству глубокого удовлетворения. Вот и интересуюсь, может у кого то есть идеи получше.
Разве что в gcc. Там есть соответствующая конструкция. А в стандартном нету. Если нет варианта с va_list то остается ну разве что формировать стек на асме.
...
Рейтинг: 0 / 0
Вызов функции c переменным числом параметров из функции с переменным числом параметров
    #33854148
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я
Если нет варианта с va_list то остается ну разве что формировать стек на асме.

Чило параметров ограниченно 15, поэтому безопасней все таки использовать switch - но такое у#*&ще получается :) А вот с использованием ассемблера вроде посимпатичней, но опасно - push влево, push вправо и приплыли :)
...
Рейтинг: 0 / 0
Вызов функции c переменным числом параметров из функции с переменным числом параметров
    #33854490
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6yЧило параметров ограниченно 15, поэтому безопасней все таки использовать switch - но такое у#*&ще получается :) ...

а вместо свитча не покатит 15 методов с разным кол-вом параметров ? не знаю как "смотреться" - но то, что работать будет быстрее - адназначно...


с уважением
(круглый)
...
Рейтинг: 0 / 0
Вызов функции c переменным числом параметров из функции с переменным числом параметров
    #33854569
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0 v6yЧило параметров ограниченно 15, поэтому безопасней все таки использовать switch - но такое у#*&ще получается :) ...

а вместо свитча не покатит 15 методов с разным кол-вом параметров ? не знаю как "смотреться" - но то, что работать будет быстрее - адназначно...


с уважением
(круглый)
Быстрее чем что и почему? Честно говоря, не вижу смысла создавать 15 методов - число параметров заранее неизвестно, так что все равно придется использовать свич->кейс->вызов соответсвующего метода.
...
Рейтинг: 0 / 0
Вызов функции c переменным числом параметров из функции с переменным числом параметров
    #33854618
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6y...так что все равно придется использовать свич->кейс->вызов соответсвующего метода.

я правильно Вас понимаю? Что компилятор не смогёт правильно вызвать методы с одинаковым именем и разным кол-вом параметров ?
Пример...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Mau
{
public:
	Mau(void) {};
	Xru(char c1) {};
	Xru(char c1, char c2) {};
	Xru(char c1, char c2, char c3) {};
	Xru(char c1, char c2, char c3, char c4) {};
};

быстрее потому, что на этапе компиляции (на стадии компиляции заметьте!) у Вас подставиться необходимый метод с необходимым кол-вом параметров.


с уважением
(круглый)
ЗЫ
Надеюсь уже в каждом методе позвать соответствующую функцию - не составит труда ?
...
Рейтинг: 0 / 0
Вызов функции c переменным числом параметров из функции с переменным числом параметров
    #33854684
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0 v6y...так что все равно придется использовать свич->кейс->вызов соответсвующего метода.

я правильно Вас понимаю? Что компилятор не смогёт правильно вызвать методы с одинаковым именем и разным кол-вом параметров ?
Пример...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Mau
{
public:
	Mau(void) {};
	Xru(char c1) {};
	Xru(char c1, char c2) {};
	Xru(char c1, char c2, char c3) {};
	Xru(char c1, char c2, char c3, char c4) {};
};

быстрее потому, что на этапе компиляции (на стадии компиляции заметьте!) у Вас подставиться необходимый метод с необходимым кол-вом параметров.


с уважением
(круглый)
ЗЫ
Надеюсь уже в каждом методе позвать соответствующую функцию - не составит труда ?

А, дошло Пожалуй тоже вариант. Сенкс.
...
Рейтинг: 0 / 0
Вызов функции c переменным числом параметров из функции с переменным числом параметров
    #34241049
Лебедкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я
Разве что в gcc. Там есть соответствующая конструкция. А в стандартном нету. Если нет варианта с va_list то остается ну разве что формировать стек на асме.
А в gcc это конструкция как называется?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов функции c переменным числом параметров из функции с переменным числом параметров
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]