2007-02-24

Boost.Function is the magic to me

 anyを理解できたので、functionも読もうとしてみた。そして挫折した。これは難しい。Preprocessor Metaprogrammingという、ふざけた概念には、付き合えそうにない。プリプロセスされた結果を読み解こうとするが、boost/function.hppだけで出力された結果は1.46MBにもなり、とても読みきれない。仕方がない、プリプロセッサメタプログラミングを学ばねばならない。  基本的なことだけを理解して、とりあえず読みにかかったが、実際、膨大すぎる。  とりあえず分かったこと。  boost::functionはBOOST_FUNCTION_FUNCTIONを継承、BOOST_FUNCTION_FUNCTIONはfunction_baseを継承している。BOOST_FUNCTION_FUNCTIONは、BOOST_JOINによって、function10などという風になる。BOOST_JOINは、boost/config/suffix.hppで定義されている。  BOOST_FUNCTION_FUNCTIONは、function_baseを継承している。  で、実際どこでnewをしているのか、どこにoperator()();があるのかすら分からない。

3 comments:

MB said...

http://tinyurl.com/ntf7x
攻略しました。が、最新のはbindか何かへの最適化も入って
さらにややこしくなってるはず

江添亮 said...

うおおおおお、これは分かりやすい。
さて、次はbindか……。

MB said...

boost::bindは個人的には読まなくていいと思う。古いので。
Spiritも古いので読まなくていいかもしれない。Spirit2がもうすぐ来ます。