Что не так с моей картой типов SWIG?

Я создал карту типов SWIG для своей функции.

%typemap(in) (int width, int height, lua_State *L)
{
if (!lua_isnumber(L, -1) || !lua_isnumber(L, -2))
SWIG_exception(SWIG_RuntimeError, "argument mismatch: number expected");
$1 = lua_tonumber(L, -1);
$2 = lua_tonumber(L, -2);
$3 = L;
}

Но это не сработает, если я попытаюсь вызвать функцию в Lua.

Я называю эту функцию следующим образом в Lua.

createWindow(500,300)

Я просто хочу пройти width, height от Луа до этой функции.

Как я могу исправить карту типов, чтобы она работала?

2

Решение

Типы с несколькими аргументами здесь не помогут, потому что они предназначены для отображения одного аргумента Lua на несколько аргументов C ++. Вы можете помочь себе с аргументом по умолчанию здесь. Это сделано с помощью %typemap(default), Мы говорим SWIG по умолчанию любой lua_State *L аргумент экземпляра, используемого SWIG.

%module window

%{
#include <iostream>

void createWindow(int width, int height, lua_State *L) {
std::cout << "Creating window of size " << width << "x" << height << '\n'
<< "Number of arguments: " << lua_gettop(L) << '\n';
}
%}

%typemap(default) (lua_State *L) {
$1 = L;
}

void createWindow(int width, int height, lua_State *L);
local window = require("window")
window.createWindow(500,300)
$ lua5.2 test.lua
Creating window of size 500x300
Number of arguments: 2
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector