例えば、BOOST_PP_ITERATE
とBOOST_PP_ITERATION
は、GManの回答者hereのように、プリプロセッサマクロであり、パラメータはありません。 ()
がなければ、彼らは単なる定義ではなく、そのように使用される理由はありますか?単純な定義の代わりにマクロを使用するBoost.Preprocessorの理論的根拠?
答えて
一般に、マクロのような機能を使用して意図しないマクロの拡大を防ぐことができます。
BOOST_PP_CAT(BOOST_PP_ITERATION, _DEPTH)
、我々はこれがBOOST_PP_ITERATION_DEPTH
に展開することを期待:我々は次のマクロ呼び出しを持っていると仮定して例えば
、。
しかし、BOOST_PP_ITERATION
が(機能しない)マクロのようなオブジェクトである場合、 トークンが連結によって生成される前に独自の定義に展開されます。 BOOST_PP_ITERATION_DEPTH
おそらくそれらは操作を実行するため、実際にはが何らかの定数を使用するだけでなく、を呼び出すことが明確になります。
これは 'BOOST_PP_ITERATE'でも当てはまりますが、' BOOST_PP_ITERATION'はどうでしょうか?これはあなたの現在の反復の深さafaikとしてのみ使用されるはずです。 – Xeo
ああ、私はあなたが 'BOOST_PP_ITERATION'に言及したことに気付かなかった。まあ、根拠はかなり似ていると思う: 'BOOST_PP_ITERATION'の結果は可変であるので、値を返す関数のように見えるようにするのが理にかなっています。もちろん、一貫性があります。 –
しかし、今私は 'BOOST_PP_IS_ITERATING'がこの慣習を使わないことを見ています。:-s! –
- 1. Goのメソッド構文の理論的根拠
- 2. 複数のRPMを同じディレクトリに展開する - ベストプラクティスと理論的根拠
- 3. Slf4jはlogger4jの代わりに単純なslf4jを使用しています
- 4. 代わりとしてcontainer_ofを定義するcontainer_ofマクロ
- 5. マクロの代わりにテンプレートパラメータパックを使用する
- 6. HDFSで使用される異なるログファイルサイズの根拠となる理由
- 7. 選択ボックスの代わりにhrefの単純なvモデルvue.js
- 8. 論理とパフォーマンスの根本的な矛盾
- 9. Kinectを使用した単純な静的ジェスチャーのジェスチャー定義の作成
- 10. なぜ単純なプログラムブロックの代わりにレイヤードテストベンチを使用するのですか?
- 11. なぜAngular 2がルーティングで単純な配列の代わりにObservablesを使用するのですか?
- 12. 単純なSASマクロのエラー
- 13. 単純な暗黙的な仲裁を定義する
- 14. 単純なクラスの代わりに実際のWEB APIプロジェクトをホストする
- 15. 単純なアイコンの代わりにナビゲーションドロワーメニューに国旗を表示する方法
- 16. レンダリングの背後にある根拠:redirect_toの代わりに新しく、POST作成のために新しい?
- 17. 最近のpytestの代わりに単純な "assert"がありますか?
- 18. DDD - 非常に単純なブログモデルの根を集約する
- 19. 単純なワイルドカード使用ミスの理解
- 20. EAVの代わりにユーザー定義フィールド?
- 21. Cでは小文字のマクロ定義を使用しない技術的な理由はありますか?
- 22. getTypeId()は、単純な製品の構成の代わりに、単純な返し - Magentoの
- 23. VBAマクロで辞書を使用する単純なVLOOKUP
- 24. 誰かが単純なPHPの代わりにZend Frameworkを使用する利点は何ですか?
- 25. 単位テストOracleの代わりにHSQLを使用するMyBatis
- 26. jQueryプラグイン単純な配列の代わりにオブジェクトを返すpublic関数
- 27. C++物理的な単位の単位のユーザー定義のリテラル
- 28. Date []の代わりにlong []を使用する理由
- 29. guava:コンストラクタの代わりにメソッドcreate()を使用する理由
- 30. QAの代わりにmochaを使用する理由
これは、連結だけでなく、これらのマクロを他の 'BOOST_PP'マクロに渡すためのものです。' BOOST_PP_EMPTY'は 'BOOST_PP_ENUM(NUM、MYMACRO、BOOST_PP_EMPTY)'でよく使われます。 – Xeo