#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の場合のサンプルです。
>>> import my_sample >>> print my_sample.greet( "Taro" ) Hello, Taro >>> print my_sample.square( 50 ) 2500 >>>
ご存じの方も多いと思われますが、Python というオブジェクト指向なスクリプト言語があります。Pythonでは、 拡張モジュールとして機能を追加していくということが可能なのですが、 そのモジュール作成をC++で行う際の色々面倒なところを上手く処理してくれるのが、 このboost.pythonであります。 上の例では関数のexportしかしていませんが、勿論クラスを扱うこともOK。
一から拡張モジュールを書くと、(私はやったことないので詳しくは知りませんが、) ガーベジコレクト用の参照カウント管理や、引数の解析、 型チェックなどなどの面倒な処理をモジュール側でやらないといけないらしいのですが、 その辺りをラッピングしてあるそうです。