我的 SWIG 类型图有什么问题?
What is wrong with my SWIG typemap?
我为我的函数创建了一个 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");
= lua_tonumber(L, -1);
= lua_tonumber(L, -2);
= L;
}
但是如果我尝试调用 Lua 中的函数,它不起作用。
我在 Lua.
中这样调用这个函数
createWindow(500,300)
我只想将 width
、height
从 Lua 传递给这个函数。
如何修复类型映射以使其正常工作?
多参数类型映射在这里不起作用,因为它们旨在将单个 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) {
= 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
我为我的函数创建了一个 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");
= lua_tonumber(L, -1);
= lua_tonumber(L, -2);
= L;
}
但是如果我尝试调用 Lua 中的函数,它不起作用。
我在 Lua.
中这样调用这个函数createWindow(500,300)
我只想将 width
、height
从 Lua 传递给这个函数。
如何修复类型映射以使其正常工作?
多参数类型映射在这里不起作用,因为它们旨在将单个 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) {
= 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