PythonからC++クラスを呼び出す(2)
今回は Python の ctypes モジュールを使い C++ クラスを Python から呼び出してみました。 ctypes モジュールは python2.5 以降では標準で含まれるようです。 まずは C++ クラスのコンストラクタ、デストラクタ、メンバ関数の wrapper 関数を作り、 Python から呼び出してみました。
題材は昨今作成中の詰将棋プログラムです。 以下のサンプル出力では、 まず共有ライブラリ libcshogi.so をロードし、 次にコンストラクタに盤面情報を文字列で渡し、 最後に探索メソッドを呼び出し、解答を出力しています。 ctypes は使い易い。Python 標準実装と云うのも心強いし、 とりあえず決まりかな^^
$ python2.5
>>> import ctypes
>>> so=ctypes.CDLL("./libcshogi.so")
>>> cp=so.cshogi_create('K32S22S34L11P13P23P44~R2BG3S2N4L3Pe/P54b53p41~G/')
9 8 7 6 5 4 3 2 1
|.|.|.|.|.|p|.|.|L|1 {R2,B,G3,S2,N4,L3,Pe}
|.|.|.|.|.|.|K|S|.|2
|.|.|.|.|b|.|.|P|P|3
|.|.|.|.|P|P|S|.|.|4
|.|.|.|.|.|.|.|.|.|5
|.|.|.|.|.|.|.|.|.|6
|.|.|.|.|.|.|.|.|.|7
|.|.|.|.|.|.|.|.|.|8
|.|.|.|.|.|.|.|.|.|9 {G}
>>> so.cshogi_solve(cp, 7)
G33 K2132 b3153 S3122 p3141 K3121 S32
G33 K2132 b3153 S3122 p3141 K1221 S21