为具有多个参数的函数创建SWIG类型映射的更简单方法?

时间:2018-06-16 09:42:17

标签: c++ lua swig typemaps

这是我想用SWIG包装的C ++函数。

static void my_func(t_string name, t_string value)
{
    do_something(name, value);
}

以下是SWIG型图。

%typemap(in) (t_string name)
{
    if (!lua_isstring(L, $input)) {
      SWIG_exception(SWIG_RuntimeError, "argument mismatch: string expected");
    }
    $1 = lua_tostring(L, $input);
}

%typemap(in) (t_string value)
{
    if (!lua_isstring(L, $input)) {
      SWIG_exception(SWIG_RuntimeError, "argument mismatch: string expected");
    }
    $1 = lua_tostring(L, $input);
}

这样,我可以在Lua中成功使用my_func

但是我想知道是否有比这更简单的解决方案,因为上面的2个类型图是相同的,但只使用不同的名称。

假设我后来有一个C ++函数需要3 t_string个参数,那么我是否应该使用不同的名称再添加一个类型图? 或者会有更简单的解决方案吗?

1 个答案:

答案 0 :(得分:2)

你做错了。您正在为单个类型使用多参数类型映射。从t_string中删除变量名称(以及可选的括号)。有关文档类型图的章节中有关pattern matching的部分详细说明了这一点。

%module typemaptest

%typemap(in) t_string
{
    if (!lua_isstring(L, $input)) {
      SWIG_exception(SWIG_RuntimeError, "argument mismatch: string expected");
    }
    $1 = lua_tostring(L, $input);
}

void my_func(t_string name, t_string value);