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) {
}
我正在使用 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) {
}