2011-03-31 4 views

答えて

4

一般に、マクロのような機能を使用して意図しないマクロの拡大を防ぐことができます。

BOOST_PP_CAT(BOOST_PP_ITERATION, _DEPTH) 

、我々はこれがBOOST_PP_ITERATION_DEPTHに展開することを期待:我々は次のマクロ呼び出しを持っていると仮定して例えば
、。
しかし、BOOST_PP_ITERATIONが(機能しない)マクロのようなオブジェクトである場合、 トークンが連結によって生成される前に独自の定義に展開されます。 BOOST_PP_ITERATION_DEPTH

+0

これは、連結だけでなく、これらのマクロを他の 'BOOST_PP'マクロに渡すためのものです。' BOOST_PP_EMPTY'は 'BOOST_PP_ENUM(NUM、MYMACRO、BOOST_PP_EMPTY)'でよく使われます。 – Xeo

1

おそらくそれらは操作を実行するため、実際にはが何らかの定数を使用するだけでなく、を呼び出すことが明確になります。

+0

これは 'BOOST_PP_ITERATE'でも当てはまりますが、' BOOST_PP_ITERATION'はどうでしょうか?これはあなたの現在の反復の深さafaikとしてのみ使用されるはずです。 – Xeo

+0

ああ、私はあなたが 'BOOST_PP_ITERATION'に言及したことに気付かなかった。まあ、根拠はかなり似ていると思う: 'BOOST_PP_ITERATION'の結果は可変であるので、値を返す関数のように見えるようにするのが理にかなっています。もちろん、一貫性があります。 –

+0

しかし、今私は 'BOOST_PP_IS_ITERATING'がこの慣習を使わないことを見ています。:-s! –

関連する問題