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