|
|
|
Вызов функции c переменным числом параметров из функции с переменным числом параметров
|
|||
|---|---|---|---|
|
#18+
Привет всем. Несколько пятничная тема... Сделал небольшой класс-обертку для работы с event-ами Firebird. Есть там такая функция Код: plaintext 1. Соответствующий метод класса Код: plaintext 1. Вопрос: как из fb_event_block вызвать isc_event_block с тем же числом переменных параметров (все переменные параметры должны иметь тип char *) Сразу напрашиваются три варианта: 1) Самому формировать event_buffer и result_buffer (Благо опенсорс) 2) Использовать inline ассемблер 3) Поскольку id_count не должно превышать 15, то использовать конструкцию switch Каждый из этих вариантов имеет недостатки : 1) Теоретически, формат EPB может измениться. 2) Ну и так ясно. 3) Просто по уродски выглядит. Есть у кого какие новые идеи на это счет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 11:18 |
|
||
|
Вызов функции c переменным числом параметров из функции с переменным числом параметров
|
|||
|---|---|---|---|
|
#18+
У меня была похожая ситуация с функцией ::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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 12:06 |
|
||
|
Вызов функции c переменным числом параметров из функции с переменным числом параметров
|
|||
|---|---|---|---|
|
#18+
Ой Вэй Так что если есть вариант isc_event_block с va_list , то можно вызвать его. Такого варианта данной функции нет, но можно попробовать попросить разработчиков его сделать :) Собственно варианты 2 и 3 я уже вреднил (даже работает), но кривоватое решение данной задачи несколько напрягает и мешает чувству глубокого удовлетворения. Вот и интересуюсь, может у кого то есть идеи получше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 12:51 |
|
||
|
Вызов функции c переменным числом параметров из функции с переменным числом параметров
|
|||
|---|---|---|---|
|
#18+
v6y Ой Вэй Так что если есть вариант isc_event_block с va_list , то можно вызвать его. Такого варианта данной функции нет, но можно попробовать попросить разработчиков его сделать :) Собственно варианты 2 и 3 я уже вреднил (даже работает), но кривоватое решение данной задачи несколько напрягает и мешает чувству глубокого удовлетворения. Вот и интересуюсь, может у кого то есть идеи получше. Разве что в gcc. Там есть соответствующая конструкция. А в стандартном нету. Если нет варианта с va_list то остается ну разве что формировать стек на асме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 14:20 |
|
||
|
Вызов функции c переменным числом параметров из функции с переменным числом параметров
|
|||
|---|---|---|---|
|
#18+
ну я Если нет варианта с va_list то остается ну разве что формировать стек на асме. Чило параметров ограниченно 15, поэтому безопасней все таки использовать switch - но такое у#*&ще получается :) А вот с использованием ассемблера вроде посимпатичней, но опасно - push влево, push вправо и приплыли :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 14:49 |
|
||
|
Вызов функции c переменным числом параметров из функции с переменным числом параметров
|
|||
|---|---|---|---|
|
#18+
v6yЧило параметров ограниченно 15, поэтому безопасней все таки использовать switch - но такое у#*&ще получается :) ... а вместо свитча не покатит 15 методов с разным кол-вом параметров ? не знаю как "смотреться" - но то, что работать будет быстрее - адназначно... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 15:55 |
|
||
|
Вызов функции c переменным числом параметров из функции с переменным числом параметров
|
|||
|---|---|---|---|
|
#18+
kolobok0 v6yЧило параметров ограниченно 15, поэтому безопасней все таки использовать switch - но такое у#*&ще получается :) ... а вместо свитча не покатит 15 методов с разным кол-вом параметров ? не знаю как "смотреться" - но то, что работать будет быстрее - адназначно... с уважением (круглый) Быстрее чем что и почему? Честно говоря, не вижу смысла создавать 15 методов - число параметров заранее неизвестно, так что все равно придется использовать свич->кейс->вызов соответсвующего метода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 16:10 |
|
||
|
Вызов функции c переменным числом параметров из функции с переменным числом параметров
|
|||
|---|---|---|---|
|
#18+
v6y...так что все равно придется использовать свич->кейс->вызов соответсвующего метода. я правильно Вас понимаю? Что компилятор не смогёт правильно вызвать методы с одинаковым именем и разным кол-вом параметров ? Пример... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. быстрее потому, что на этапе компиляции (на стадии компиляции заметьте!) у Вас подставиться необходимый метод с необходимым кол-вом параметров. с уважением (круглый) ЗЫ Надеюсь уже в каждом методе позвать соответствующую функцию - не составит труда ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 16:21 |
|
||
|
Вызов функции c переменным числом параметров из функции с переменным числом параметров
|
|||
|---|---|---|---|
|
#18+
kolobok0 v6y...так что все равно придется использовать свич->кейс->вызов соответсвующего метода. я правильно Вас понимаю? Что компилятор не смогёт правильно вызвать методы с одинаковым именем и разным кол-вом параметров ? Пример... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. быстрее потому, что на этапе компиляции (на стадии компиляции заметьте!) у Вас подставиться необходимый метод с необходимым кол-вом параметров. с уважением (круглый) ЗЫ Надеюсь уже в каждом методе позвать соответствующую функцию - не составит труда ? А, дошло Пожалуй тоже вариант. Сенкс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 16:41 |
|
||
|
Вызов функции c переменным числом параметров из функции с переменным числом параметров
|
|||
|---|---|---|---|
|
#18+
ну я Разве что в gcc. Там есть соответствующая конструкция. А в стандартном нету. Если нет варианта с va_list то остается ну разве что формировать стек на асме. А в gcc это конструкция как называется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2007, 13:17 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2029709]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
10ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 259ms |
| total: | 520ms |

| 0 / 0 |
