2017-12-16 7 views
1

は例えば、私はtest.cppを持っている:SWIGインターフェイスファイルの書き込み方法は?

#include<iostream> 
using namespace std; 

void hello(){ 
    cout<<"Hello World!"<<endl; 
} 

私はtest.iを書く:

%module test 

%{ 
#include<iostream> 
%} 

void hello(); 

私はtest_wrap.cxxをコンパイルすると、それは私にhello() is not declareを言うと、私はtest.iを変更:

%module test 

%{ 
#include<iostream> 
void hello(); 
%} 

void hello(); 

コンパイルに合格しましたが、私は混乱しています。私はいくつか見るのでdemos関数宣言を%{%{に記述しないでください。なぜ、 void hello();を2回書く必要がありますか?

+0

インタフェースファイル内の関数を手動で宣言するのではなく、ヘッダファイルを '%include'することをお勧めします(http://www.swig.org/Doc3.0/SWIGDocumentation.html#SWIG_nn46)。それはあなたのために働かないのですか? – Melebius

答えて

1

%{%}の間のコードは、生成されたラッパーに直接コピーされます。ラッパーはvoid hello();が外部であることを知る必要があります。

%{%}マーカー以外のコードはラッパーコードを生成するので、void hello();はその関数のラッパーコードを生成します。

%inline %{ 
    void hello(); 
%} 

これは、両方のラッパーにコードを追加し、ラッパーを生成します。

には、使用可能な繰り返しを避けるために。

+0

'wrapper'と' wrapper'を生成するとはどういう意味ですか? – gaussclb

+0

SWIGを実行すると、別の言語が呼び出せる形式で関数を公開するコードでC++関数をラップするソースコードが生成されます。 –

関連する問題