Как создать общую обертку, которая может вызвать другие функции, которые имеют произвольные и произвольно много входов?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как создать общую обертку, которая может вызвать другие функции, которые имеют произвольные и произвольно много входов?

Сообщение Anonymous »

У меня есть серия функций и объектов в C ++, которые будут называться/вызвать LUA, у меня уже есть существующий код, который делает именно это (используя MFC COM Dispatch) для VBScript (см. Внизу этого поста), поэтому я мог бы воссоздать/создать обертки для всех его в C ++, используя существующий C API LUA. Но учитывая количество функций и классов, которые займет гораздо больше времени, чем если бы я мог бы просто создать что -то похожее на диспетчеры COM и просто перенаправить зарегистрированные функции LUA прямо на существующие функции C ++. Обратите внимание, что все функции LUA в C API в основном имеют одинаковую подпись: < /p>

Код: Выделить всё

// accepts a Lua state with the input/s in the stack
// returns the number of outputs, pushes "actual" outputs onto the stack
int Func(lua_State* L)
< /code>
Представьте, что у меня есть, например, функции, которые выглядят так: < /p>
int Add(int x, int y)
double Divide(double x, double y)
void DoStuff(int x, double y, CString abc)
< /code>
Мне понадобится обертка (давайте назовем ее luawrapper :: genericfunction), которая будет выглядеть как приведенный выше вызов API Lua C, прочитайте различные типизированные входы из стека, вызовите соответствующую функцию с этими входами и возвращайте правильно типированный выход. < /p>
lua обычно деликации. Здесь я грубо обрисовываю синтаксис того, как будет использоваться Luawrapper :: genericfunction: < /p>
// have the Lua state redirect scripted calls to "Add" to this function:
// LuaWrapper::GenericFunction takes the Lua state, the function itself, the output type, and a list/string/whatever of the input types; then calls the function on those inputs and pushes the output onto the Lua state's stack
lua_register(L, "Add", Add); // vs:
lua_register(L, "Add", [](lua_State* L) { return LuaWrapper::GenericFunction(L, RealFunctions::Add, INT_TYPE, "INT INT"; });
< /code>
Проблема в том, что я не могу понять, как заставить входные данные работать и как вызвать совершенно общую функцию, которая может иметь в основном любое количество входов любого типа (они гарантируются, что они не являются ссылками, если они не являются объектами класса, для которых у меня есть план DO). Я знаю, что это возможно, так как API MFC COM в основном делает именно это для VBScript.// "Function" outputs an int, and takes two strings and a bool as inputs
// VT_I4 is basically an enum, VTS_??? are strings that get concatenated in this syntax
DISP_FUNCTION(CParentClass, "Function", Function, VT_I4, VTS_BSTR VTS_BSTR VTS_BOOL)
< /code>
затем написан как стандартная функция этого класса; разрешение VBScript вызвать его. < /p>
int CParentClass::Function(CString str1, CString str2, bool true_or_false)


Подробнее здесь: https://stackoverflow.com/questions/796 ... ave-arbitr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»