Я создал карту типов 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
от Луа до этой функции.
Как я могу исправить карту типов, чтобы она работала?
Типы с несколькими аргументами здесь не помогут, потому что они предназначены для отображения одного аргумента 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
Других решений пока нет …