LINUX.ORG.RU

Вызов функция с переменным кол-вом параметров!


0

0

Необходимо вызывать функцию с переменным кол-вом параметров. Кол-во параметров, тип и последовательность будет определяется текстовой строкой вида «%s1 %c1 %d1 %f1 %d2».

Т.к. таких вариаций вызова будет много, параметры должны подставляться на ходу на ходу.

C/С++


Самому приходит на ум решения использывать asm вставку:
push
push
push
call

Но может С тоже может с этим справится?

T-34
() автор топика
Ответ на: комментарий от Begemoth

Видя такое понимаю что не все поняли вопрос. Мне нужно динамически подставлять параметры при вызове:

T-34
() автор топика
Ответ на: комментарий от VladimirMalyk

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

По указателю скажем.

T-34
() автор топика
Ответ на: комментарий от T-34

Так задавать вопрос надо нормально, в языке такого нет. В качестве переносимого решения в первую очередь вспоминается libffi.

Begemoth ★★★★★
()

А вообще если писать на C++, то лучше сделать как в Boost.Format

Begemoth ★★★★★
()
Ответ на: комментарий от T-34

> Видя такое понимаю что не все поняли вопрос.

T-34


Чувак, ты точно в танке!

LamerOk ★★★★★
()

голосую за void*

может алгоритм другой придумаешь или язык подберёшь?

dimon555 ★★★★★
()
Ответ на: комментарий от mv

> Ему нужен механизм optional параметров, либо список, в котором можно мешать типы.

Он еще не в курсе, что и va_list его устраивает на все 100%.

balodja ★★★
()
Ответ на: комментарий от tia

Спасибо! Отличные ссылки, то что нужно! Единственный вменяемый ответ!

P.S: Жаль что на ЛОР рейтинг зависит от кол-во постов, а не от их эффективности ответов.


T-34
() автор топика
Ответ на: комментарий от t184256

>Необходимо вызывать функцию с переменным кол-вом параметров.

T-34
() автор топика
Ответ на: комментарий от balodja

>> Ему нужен механизм optional параметров, либо список, в котором можно мешать типы.

Он еще не в курсе, что и va_list его устраивает на все 100%.

Тоже хотел написать, что он плохо va_list вкурил. Но если ему понравился ответ про карринг, то я не уверен, что кто-то кроме tia смог распарсить его вопрос.

Alesh
()
Ответ на: комментарий от Alesh

У этого митька есть функция типа void Func(const char* fmt,...), и ему нужно вызывать её в рантайме, причем аргументы задаются по командам голосов в голове,строкам в конфиге и т.п.

anonymous
()
Ответ на: комментарий от Begemoth

Когда человек не знает, чего хочет, он выбирает «правильный» ответ из эстетических соображений.

balodja ★★★
()
Ответ на: комментарий от anonymous

> У этого митька есть функция типа void Func(const char* fmt,...), и ему нужно вызывать её в рантайме, причем аргументы задаются по командам голосов в голове,строкам в конфиге и т.п.

До меня дошло все таки, после вдумчивого перечитывания второго поста (не считая стартового). Без извратов, такое не реализовать. Но все равно не врубился, чем понравился ответ про карринг.

Alesh
()
Ответ на: комментарий от Alesh

Мне кажется, что он просто не понял, что это такое :-)

Begemoth ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.