SWIG を使用した例を次に示します。
C++ 関数「inflow」を呼び出す Python コード:
import inflow # importing C++ inflow library
nframes = 25
print 'calling inflow function in loop ...'
for i in xrange(0,1001):
z = inflow.inflow(""" arguments""")
""" code does something with z """
C++ 関数は通常どおり次のようになります。
#include <iostream>
#include <vector>
inflow(/* arguments from Python*/)
{
/* code does something */
}
次に、Python とのインターフェイスを作成するための手順を次に示します。
1) 重要 - このステップでバインドしようとしている C++ コードが、コマンドで指定された名前とは異なる名前であることを確認してください。そうしないと、swig コードで上書きされます。
example_wrap.cpp が Python とインターフェースしたいファイルで、"example.i" が SWIG インターフェース ファイルだとしましょう。SWIG は、example.cpp という名前の新しいファイルを生成します。
2) swig -c++ -python -o example_wrap.cpp example.i
3) g++ -I /usr/include/python2.7 -fPIC -c example_wrap.cpp -o example_wrap.o
4) g++ -shared -o _example.so example_wrap.o
アイデアは、コンパイルされたモジュール名がアンダースコアで始まり、その後に名前が続く必要があるということです。
5) 用語で Python を開き、次のように言います。
from example import *
そして、関数の呼び出しを開始します。
6) ソース: http://www.iram.fr/~roche/code/python/SWIG.html#purpose
この例のインターフェイス ファイルは次のようになります。
%module example
%{
#include "example.h"
%}
%include "std_vector.i"
// Instantiate templates used by example
namespace std {
%template(IntVector) vector<int>;
%template(DoubleVector) vector<double>;
}
// Include the header file with above prototypes
%include "example.h"