boost::python

トップページ > その他 >

abstract

必要なヘッダ
<boost/python.hpp>
出来ること
C++からPython / PythonからC++を使うための補助フレームワーク
リファレンス
en / jp

sample

#include <string>
#include <boost/python.hpp>
using namespace std;

// てきとーな関数
string add_hello( string s )
{
	return "Hello, " + s;
}

int square( int n )
{
	return n * n;
}

// モジュールの初期化ルーチン:モジュール名=my_sample
BOOST_PYTHON_MODULE( my_sample )
{
	// C++のadd_hello関数を、greetという名前でpython用に公開
	boost::python::def( "greet", add_hello );

	// C++のsquare関数を、squareという名前でpython用に公開
	boost::python::def( "square", square );
}
## 共有ライブラリとしてコンパイルして、インストール
cl my_sample.cpp boost_python.lib /LD
copy my_sample.dll %PYTHONDIR%\DLLs

※ VC++ on Windowsの場合のサンプルです。

Pythonでの実行例

>>> import my_sample
>>> print my_sample.greet( "Taro" )
Hello, Taro
>>> print my_sample.square( 50 )
2500
>>>

etc

ご存じの方も多いと思われますが、Python というオブジェクト指向なスクリプト言語があります。Pythonでは、 拡張モジュールとして機能を追加していくということが可能なのですが、 そのモジュール作成をC++で行う際の色々面倒なところを上手く処理してくれるのが、 このboost.pythonであります。 上の例では関数のexportしかしていませんが、勿論クラスを扱うこともOK。

一から拡張モジュールを書くと、(私はやったことないので詳しくは知りませんが、) ガーベジコレクト用の参照カウント管理や、引数の解析、 型チェックなどなどの面倒な処理をモジュール側でやらないといけないらしいのですが、 その辺りをラッピングしてあるそうです。

presented by k.inaba   under NYSDL.