2016-09-26 46 views
0

我想将异常catch处理程序应用于我用%extend指令添加到类中的方法(但没有成功)。Swig在%扩展方法中应用%异常指令

我简单的Test.h文件:

namespace Test { 
    class TestClass 
    { 
    int method1() 
    { 
     throw MyException(); 
    } 
    } 
} 

我痛饮文件:

%module Test 

%{ 
#include Test.h 
%} 

%extend Test::TestClass { 
    int method2() 
    { 
    throw MyException(); 
    } 
} 

%exception { 
    try { 
    $action 
    } catch (MyException& e) { 
    // do something 
    } 
} 

%include "Test.h" 

当我编译此痛饮文件,与异常处理,但包装器生成method1包装method2是在没有异常处理程序的情况下生成的(我还尝试了全方法名称声明的所有变体以及其他尝试都没有成功的其他尝试)。

有没有办法将%exception指令添加到Swig中的扩展方法?

回答

0

在您的界面中切换%extend%exception指令的顺序。您应用它们的顺序非常重要,它允许您选择性地包含和排除被修改的内容。

+0

不知道我怎么可能错过它!在提前给你的答案,你有任何swig文件模板,这将有助于组织我的swig文件?我有几百个swig文件,来自不同的软件包,并且很难管理所有这些引起这个恼人的bug的小部分。 –

+0

@ or.m我试图像对待任何其他C++库一样对待它 - 将有用位拆分出来,并使它们成为尽可能最小的代码单元。大多数I%在后来的其他项目中包含(std_XXXX.i)。几个I%导入来代替,但很少有这样的东西足够有意义。 – Flexo