SWIG 和异常:避免在 C++ 中使用 throw(Exception)

SWIG & exceptions: avoid using throw(Exception) in C++

我正在使用 SWIG 将 C++ 库包装成一个 JAVA 库,遵循 Handling C++ exceptions in Java via SWIG.

的想法

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

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

一切如预期。但是,如果我这样做

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

当我使用代理 class

在 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。问题是,我可以避免吗?怎么样?

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

static class MyException extends RuntimeException {

}

...

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

...

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

}