SWIG&例外:避免在C ++中使用throw(Exception)

时间:2015-10-15 10:52:43

标签: java c++ swig

我正在使用SWIG将C ++库包装成JAVA,并遵循Handling C++ exceptions in Java via SWIG的想法。

我已经能够包装所有异常,但是如果在C ++声明中没有明确告知启动异常的函数,则JAVA代码不起作用。例: 如果我做

class A {
    public:
         void f () throw (MyException){};
一切都按预期进行。但是,如果我这样做

class A {
    public:
         void f (){};

当我使用代理类

在JAVA中捕获异常时
try {
     // this is the proxy wrapped (java) class
     A.f();
}
catch(MyException e)
{
    ...
}

JAVA编译失败,出现以下错误

exception MyExceptionn is never thrown in body of corresponding try statement

我不想在我的C ++代码中使用异常通知,如果我可以避免它http://www.gotw.ca/publications/mill22.htm。问题是,我可以避免吗?怎么样?

1 个答案:

答案 0 :(得分:1)

使MyExtension扩展RuntimeException而不是Exception,然后它可以从任何函数抛出而不仅仅是显式声明throws子句的函数。

static class MyException extends RuntimeException {

}

...

static void f() {
    throw new MyException();
}

...

try {
    f();
} catch(MyException e) {

}