2009年2月26日木曜日

swig boost_random 移植性は難しい

 今度こそ、コンパイルも通るだろ…と思ったら、家の ubuntu 環境では、またもエラーになってしまった。その原因は、型のズレによるもの。よくよく考えたら、random_class_generator.cpp を作成したのは、プラットフォーム間の違いにより生じるソースの違いを動的に吸収しようと思っての事だったので、ubuntu 上でも random_class_generator.cpp からコンパイルして実行する事にした。

 コンパイルしてみると、preprocessor の部分で引っかかった。

BOOST_PP_CAT( "hoge_", BOOST_PP_STRINGIZE(x) ) であるが、x に fuga が渡された時、MSVC では、"hoge_fuga" に展開されるが、gcc では ""hoge_""fuga"" に展開されてしまいエラーになった。MSVC に逆戻りして、チェックしてみないと、なんとも言えないが、正しくは
BOOST_PP_STRINGIZE( BOOST_PP_CAT(hoge_, x) ) とすべきなのだろうか? 'hoge_' は文字通り展開され、'x' は 'fuga' に展開されて ## により結合されるので、心情的に、かなり気持ち悪い。

 今回の教訓。プリプロセッサ、面白かったけど、罠がいっぱい。できるならば使わない方が良い。

 他にも、いろいろと引っかかっている。一筋縄ではいかないもんだ・・・。これは、まだまだ完成しそうにない。

0 件のコメント: