Что не так с моей картой типов SWIG? - PullRequest
0 голосов
/ 03 июля 2018

Я создал карту типа 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 этой функции.

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

1 Ответ

0 голосов
/ 03 июля 2018

Карты типов с несколькими аргументами здесь не сработают, потому что они предназначены для отображения одного аргумента 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
...