java - SWIG 和异常 : avoid using throw(Exception) in C++

标签 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 。问题是,我能避免吗?怎么办?

最佳答案

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

static class MyException extends RuntimeException {

}

...

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

...

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

}

关于java - SWIG 和异常 : avoid using throw(Exception) in C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33146568/

相关文章:

php - wrap_newBundle 不可用 SWIG 和网络支付

java - JUnit Mockito 测试 : zero interactions

java - 创建使用给定列表中的键初始化的映射

c++扩展同一类的构造函数(无继承)

c++ - 在 C 中处理非常大的距离矩阵(或 C++,如果有帮助的话)

python - 用于 Python 编译的动态库 - 无目录

python - SWIG Python 结构数组

java - 如何运行单一场景

java - 在 thymeleaf 中使用 Java 和 Spring 时,如何包含我的 css 文件?

c++ - 'no match for ‘operator<<’ 的具体情况 '