Boost.Preprocessor

マクロをオーバーロードする

マクロの名前を変えたらいいだけなんですが、せっかくなので昨日のを使おう まさにBOOST_MPL_PP_IS_SEQというのが、Boost.MPLにこっそりありました 例として、ヘッダでオブジェクトを定義するマクロ・・・ソースコード 引数が、Sequenceか、valueというトー…

BOOST_PP_IS_UNARY

これで引数がSequenceかどうかを調べられる・・・参照 ただし、調べられる引数は限られる(Tupleを渡したりはできない) Boost.TypeOfで使われている []#include[] []<boost/preprocessor/detail/is_nullary.hpp>[] []#include[] []<boost/preprocessor/detail/is_unary.hpp>[] []#include[] []<boost/preprocessor/detail/is_binary.hpp>[]</boost/preprocessor/detail/is_binary.hpp></boost/preprocessor/detail/is_unary.hpp></boost/preprocessor/detail/is_nullary.hpp>

Boost.PreprocessorのBOOST_PP_FORの実装の概要

マクロは再帰的に呼び出すと展開されないので、その場合は同じ機能を持つ違う名前の(違う数字が後ろについた)マクロを呼び出す boostの実装は、展開されないことを逆手にとって再帰呼び出しを検出し、上記の作業を自動化しているようだ []// if-like[] []// …