首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWIG_exception()将SWIG_RuntimeError打印为字符串

SWIG_exception()将SWIG_RuntimeError打印为字符串
EN

Stack Overflow用户
提问于 2018-06-05 17:04:06
回答 1查看 246关注 0票数 3

我用SWIG封装了我的C++函数,这样我就可以在Lua中使用它。

在我的类型图中,我检查输入是否是表。

代码语言:javascript
复制
if (!lua_istable(L, 1)) {
      SWIG_exception(SWIG_RuntimeError, "argument mismatch: table expected");
    }

但是,如果在Lua中调用了这一点,消息就会打印如下所示。

代码语言:javascript
复制
SWIG_RuntimeError:argument mismatch: table expected

我试图用-3代替-3,但是它只是打印-3而不是SWIG_RuntimeError

我包括了以下内容

代码语言:javascript
复制
%include <stl.i>
%include <std_string.i>
%include <std_except.i>

%include <exception.i>
%include <typemaps.i>

我尝试不包括<std_except.i>和/或<exception.i>,但这些都没有解决问题。

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-06 07:07:06

如果不喜欢SWIG的标准异常处理程序,只需编写自己的异常处理程序即可。然而,这将不能跨发电机携带。

这是我的接口文件:

代码语言:javascript
复制
%module typemaps

%{
#include <vector>
void test_typemap(std::vector<int>) {}
%}

%define lua_exception(msg)
    lua_pushfstring(L, "%s:%d: %s\n", __FILE__, __LINE__, msg);
    SWIG_fail;
%enddef

%typemap(in) std::vector<int> {
    if (!lua_istable(L, 1)) {
        lua_exception("expected table for first argument");
    }
}

void test_typemap(std::vector<int>);

这是Lua输入文件:

代码语言:javascript
复制
local typemaps = require("typemaps")
typemaps.test_typemap({1,2,3})
typemaps.test_typemap("not a table")

这是错误消息:

代码语言:javascript
复制
lua5.3: test.i:15: expected table for first argument

stack traceback:
    [C]: in function 'typemaps.test_typemap'
    test.lua:3: in main chunk
    [C]: in ?

第一行告诉我们它在接口文件中出错的地方。然后,在堆栈跟踪中,我们发现它在Lua输入文件中出错的地方,即第三行(test.lua:3),在那里我们尝试用字符串调用test_typemap。堆栈跟踪实际上是Lua通用的,与SWIG无关。当你打电话给error时,你总是会得到一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50705443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档