2009年2月14日土曜日

swig ってどうよ?

 ちょい突っ込んでみたが、何も全部をそのまま移植しようとしなくても良かろうに…と思うのである。%ignore により、こいつは無視してくだされ…という指定もできるのだが、ラッパーをかまそうと思ってもできない。これについては、後述する。

 だいたい、ruby のサンプルに template はあるのに、perl のサンプルに template はない。無理矢理移植をしてコンパイルしてみたが、なるほど、コンパイルが通らない。C2061 とか出てて、検索してみたら、2ch にも投稿があり、先駆者の屍が累々としていそうである。だいたい、現行 C++ の template をスクリプトにそのまま展開しようというのは狂気の沙汰であるようにも思える。

 %ignore で無視できるメンバを指定できるのに加えて、#include <hoge.hpp> の中身全てを無視するディレクティブ(指令)が欲しいところである。最終的には、sizeof(無視されたメンバ) さえ取得できれば辻褄が合うのではないかと思う(確信は無い)。

 で、ためしに boost::mt19937 のメンバを char dummy[4]; ぐらいで置き換えて、コンパイルしてみたら、実行時に見事にお亡くなりになる。


#include <boost/random.hpp>
#include <iostream>

int main() {
std::cout << sizeof(boost::mt19937) << std::endl;
return 0;
}


を実行してみると、4996 と表示された…。そんなにデカかったのかよorz...(そりゃそうか)。
気を取り直して、char dummy[4996]; で再度実行すると、うまく動いているような気がする(ただし、表示される数値は unsigned のレンジではなく signed のレンジで怪しさ倍増)。うーん…、swig ってどうよ?

0 件のコメント: