我的SWIG类型图有什么问题?

时间:2018-07-03 08:14:48

标签: c++ lua swig typemaps

我为函数创建了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)

我只想将Lua的widthheight传递给此函数。

如何修复类型图以使其正常工作?

1 个答案:

答案 0 :(得分:2)

这里,多参数类型映射不会解决问题,因为它们被设计为将单个Lua参数映射到多个C ++参数。您可以在此处使用默认参数来帮助自己。这是使用%typemap(default)完成的。我们告诉SWIG将SWIG使用的实例的任何lua_State *L参数默认为默认值。

%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