2016-06-27 4 views
0

AndroidアプリケーションのSWIGでC++コードをラッピングしています。個人的に別のクラスを継承するクラスを使用して、親のメンバー関数の一部を公開するためにそこにusingというディレクティブをスローすると、問題に直面しています。SWIGラッパーのプライベートベースクラスメンバ関数を公開できません

#include "Bar.h" 

class Foo : private Bar { 

//Stuff Foo-specific... 

public: 
    using Bar::baz; 
}; 

事は、私はSWIGを実行すると、私はラッピング中に次のメッセージを取得するには、次のとおりです:

がfoo.h:8:315警告:バー」について知らナッシング:次のようになります:baz() '。

注:両方のヘッダがラッパーファイルに含まれている私はBarヘッダーを望んでいないとして、唯一Fooヘッダがラップされるように、ラップされて、私の.iファイルは次のようになります。

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

%include "Foo.h" 

私のJavaクラスはこのシンボルを見つけることができないのでコンパイルされません。

private inheritanceusing keyword(ただし、私的継承についての例はありません)私はここで何が欠けていますか?

答えて

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

関連する問題