【发布时间】:2019-01-09 20:18:22
【问题描述】:
我想知道如何为重载函数创建 SWIG 类型映射。
MyBindings.h
static void test(t_string *s)
{
std::cout << "first : " << s->name << '\n');
}
static void test(t_string *s, t_string *s2)
{
std::cout << "first : " << s->name << '\n');
std::cout << "second : " << s2->name << '\n');
}
MyBindings.i
%module my
%{
#include "MyBindings.h"
%}
%include <stl.i>
%include <exception.i>
%include <typemaps.i>
/* convert the input lua_String to t_string* */
%typemap(in) t_string*
{
if (!lua_isstring(L, $input))
SWIG_exception(SWIG_RuntimeError, "argument mismatch: string expected");
$1 = makestring(lua_tostring(L, $input));
}
如果我在 Lua 中调用 test(),
my.test("abc", "def");
我收到以下错误:
Wrong arguments for overloaded function 'test'
Possible C/C++ prototypes are:
test(t_string *)
test(t_string *,t_string *)
我应该如何更正我的类型图以使其正常工作?
【问题讨论】:
-
要测试的参数应该是 std::string 还是 [const] char*?我认为 SWIG 的整个想法是避免为 LUA 等语言编写接口代码?
-
@RichardHodges 如果我将
t_string替换为std::string会起作用吗? -
我认为这就是 SWIG 的重点——自动为 c++ 对象提供其他语言接口。
-
您的示例非常不完整,并且充满了语法错误。 -1