HOME | ドキュメント |  ブログ  |  BBS  |  瓦版  | 将棋プロジェクト |  物置小屋   

沢庵のある食卓 象歩ブログ 128ビット整数クラス
04 December 2007

PythonからC++クラスを呼び出す

Python  

SIP を使い C++ クラスを Python から呼び出してみました。 他にも boostSWIG などあるらしいけど、こいつは軽快。良いかも。

たとえばこんな C++ クラス word.h があったとして、

class Word {
private:
    char* _word;
public:
    Word(const char*);
    const char* str() const { return _word; }
    void set(const char*);
    char* reverse() const;
};

sip を使いゴニョゴニョした後、

$ python
>>> from word import Word
>>> w=Word('abc')
>>> w.str()
'abc'
>>> w.reverse()
'cba'
>>> w.set('xyz')
>>> w.str()
'xyz'

こんなふうに Python からクラスとして扱えます。 "operator=" などサポートして無いものもあるらしいけど、スゴイ^^


作るものは C++ のヘッダに似てるけど word.sip

%Module word 0
class Word {
%TypeHeaderCode
#include 
%End
public:
    Word(const char*);
    const char* str() const;
    void set(const char*);
    char* reverse() const;
};
そして configure.py を適当に修正。
import os
import sipconfig

# The name of the SIP build file generated by SIP and used by the build
# system.
build_file = "word.sbf"

# Get the SIP configuration information.
config = sipconfig.Configuration()

# Run SIP to generate the code.
os.system(" ".join([config.sip_bin, "-c", ".", "-b", build_file, "word.sip"]))

# Create the Makefile.
makefile = sipconfig.SIPModuleMakefile(config, build_file)

# Add the library we are wrapping.  The name doesn't include any platform
# specific prefixes or extensions (e.g. the "lib" prefix on UNIX, or the
# ".dll" extension on Windows).
makefile.extra_libs = ["word"]

# Generate the Makefile itself.
makefile.generate()

あとはビルドすればできあがり。

$ g++ -fPIC -o word.o -c word.cpp
$ ar cr libword.a word.o
$ sip -c . word.sip
$ python configure.py
$ make

参考サイト

Comments
There is no comment.
Trackbacks

【注意】TrackBack 送信なさる場合、 あなたの記事中に参照リンク (当ブログの URL 記述) が必要です。 トラックバックスパム防止のため、御了承ください。

There is no trackback.
Post a comment











一回プレビューして投稿内容の確認をしてください。その後に投稿可能になります。