2016-09-26 5 views
0

% extend 지시문을 사용하여 클래스에 추가 한 메소드에 예외 catch 핸들러를 적용하려고합니다 (성공하지 못함).% 확장 메소드에 % exception 지시문을 적용한 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 예외 처리기없이 생성됩니다 (나는 또한 전체 메서드 이름 선언의 모든 변형을 시도하고 성공하지 못한 다른 시도 많이).

Swig에서 확장 메소드에 %exception 지시어를 추가하는 방법이 있습니까?

답변

0

인터페이스에서 %extend%exception 지시어를 바꿔보세요. 당신이 그들을 적용하는 순서는 중요하게 당신이 선택적으로 포함하고 수정에서 것들을 제외 할 수 있습니다.

+0

내가 어떻게 그것을 놓칠 수 있었는지 모르겠다! 미리 답변을 드리면, swig 파일을 구성하는 데 도움이되는 swig 파일 템플릿이 있습니까? 나는 수백 가지의 swig 파일을 서로 다른 패키지에서 가지고 있으며 이러한 작은 부분을 모두 관리하여이 성가신 버그를 일으키는 것은 어렵습니다. –

+0

@ or.m 다른 C++ 라이브러리와 마찬가지로 이것을 처리하려고합니다. 유용한 비트를 분리하여 가능한 최소 단위의 코드로 만듭니다. 대부분 다른 프로젝트 (std_XXXX.i)에 나중에 포함합니다. 대신 몇 %의 수입이 있지만, 그런 것이 독립형에 충분한 의미가 있다는 것은 드뭅니다. – Flexo