2016-06-27 5 views
0

Android 애플리케이션 용 SWIG로 일부 C++ 코드를 래핑합니다. 내가 다른 클래스에서 개인적으로 상속하는 클래스를 사용할 때 문제가 발생하고 거기에 using 지시어를 두어 부모 멤버 함수 중 일부를 노출합니다. 다음과 같습니다SWIG 래퍼에서 개인 기본 클래스 멤버 함수를 노출 할 수 없습니다.

#include "Bar.h" 

class Foo : private Bar { 

//Stuff Foo-specific... 

public: 
    using Bar::baz; 
}; 
나는 꿀꺽 꿀꺽을 실행할 때, 나는 포장하는 동안 다음과 같은 메시지가 도착되는 것은

:

Foo.h : 8 : 바 '에 대해 알려진 아무것도 : (315)을 경고하지 : : baz() '.

참고 : 두 헤더 래퍼 파일에 포함되어 나는 Bar 헤더를하지 않는 한, 단지 Foo 헤더가 포장하는, 래핑, 내 .i 파일과 같이 보인다 :

%{ 
    #include "Bar.h" 
    #include "Foo.h" 
%} 

%include "Foo.h" 

그리고,이 기호를 찾을 수 없기 때문에 컴파일되지 않습니다 내 자바 클래스는 ...

나는 private inheritanceusing keyword가 (개인 상속에 대한 예제가 아니지만) supp에 있다는 꿀꺽 꿀꺽 설명서를 읽어 지원이 필요하다면 여기에 무엇을 놓치고 있습니까?

답변

1

먼저 using 문은 using Bar::baz;이어야합니다.

어쨌든 SWIG는 경고문에서 Bar::baz()의 선언을 모르는 경우 Foo::baz()을 감쌀 수 없습니다.

따라서 SWIG에 신고서 (예 : %include "Bar.h" 지시어)를 표시해야합니다. Bar을 랩핑하지 않으려면 %ignore Bar; 지시문을 추가로 사용할 수 있습니다.

%ignore Bar; 
%inline %{ 
class Bar { 
public: 
    double baz() { return 4.2; } 
}; 
class Foo : private Bar { 
public: 
    using Bar::baz; 
}; 
%} 
+0

아, 참으로 '%의 ignore' 지침을 잊었다 :

여기에 최소한의 일 예이다. 나는 또한 선언문 만 필요하기 때문에'#include '를 갖는 것이 충분할 것이라고 생각했지만 분명히 틀렸다 ... 고마워! – JBL