質問によれば、人々が通常の条件文よりも構造バージョンを使用する理由はありますか?なぜboost :: ice_orを||の代わりに使うのですか? enable_ifの&&の代わりにboost :: ice_andを使用しますか?
5
A
答えて
9
Boost Coding Guidelines for Integral Constant Expressionsからの抜粋:
整数定数式に論理演算子を使用しないでください。代わりにテンプレートのメタプログラミングを使用してください。
ヘッダは、例えば、論理演算子の役割を果たし、回避策テンプレートの数が含ま代わりに:
INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2
使用:
::boost::type_traits::ice_or<INTEGRAL_CONSTANT1,INTEGRAL_CONSTANT2>::value
理由:多くのコンパイラ(特にBorlandコンパイラとMicrosoftコンパイラ)は、論理演算子を含む整数定数式を本物の整数定数式として認識しない傾向があります。この問題は一般に、整数定数式がテンプレートコードの深くにネストされ、再現と診断が難しい場合にのみ表示されます。
私は決して準拠したコンパイラではないと言います。 (しかし、準拠していないコンパイラをサポートする必要がある場合は、それを使用してください)
関連する問題
- 1. boost crc16の代わりにqchecksumを使用する
- 2. なぜAssembly.LoadFromの代わりにAssembly.LoadFileを使用しますか?
- 3. boost :: shared_arrayの代わりにstd :: shared_ptr <std::vector>を使用するのは意味がありますか?
- 4. なぜ私のスクリプトにPHP7の代わりにPHP5を使用しますか
- 5. divの代わりにdivの代わりにJSのプリペンドを使用する
- 6. なぜVaadinでVerticalLayoutの代わりにFormLayoutを使用しますか?
- 7. なぜAndroidのスタジオはカレンダーの代わりにCalendarContract.Calendarsを使用しますか?
- 8. pseqの代わりにseqを使用できますか?
- 9. なぜ `update_wrapper`の代わりに` wrap`をデコレータとして使うのですか?
- 10. なぜRustは "switch"か "case"の代わりに "match"を使うのですか?
- 11. long文の代わりに変数を使用しますか?
- 12. なぜ単にfactor()の代わりにas.factor()を使うのですか
- 13. C#では、なぜStreamWriterの代わりにTextWriterを使用できますか?
- 14. デコレータパターンの代わりにリストを使用しますか?
- 15. なぜmemo.LineはTStringListの代わりにTStringsを使用しますか?
- 16. なぜRedis SortedSetはバランスツリーの代わりにスキップリストを使用しますか?
- 17. RELEASEの代わりにNDEBUGを使用するのはなぜですか?
- 18. WireMockの代わりにMockWebServerを使用するのはなぜですか?
- 19. なぜincqの代わりにlealを使用するのですか?
- 20. WCF/Silverlight:なぜクライアントの代わりにChannelFactoryを使用するのですか?
- 21. Symfonyプロキシの代わりにワニスを使用するのはなぜですか?
- 22. FragmentStatePagerAdapterの代わりにFragmentPagerAdapterを使用するのはなぜですか?
- 23. なぜJavaの代わりにClojureを使用するのですか
- 24. なぜwindow.locationの代わりにルーティングを使用するのですか?
- 25. なぜjasmine.createSpyの代わりにspyOnを使用するのですか?
- 26. なぜRabbitMQの代わりにCeleryを使用するのですか?
- 27. マルコフモデルの代わりにRNNを使用するのはなぜですか?
- 28. なぜtf.stackの代わりにtf.concatを使用するのですか?
- 29. なぜzImageの代わりにuImageを使用するのですか?
- 30. クラスの代わりにコレクションを使用
"特にBorlandと** Microsoft **コンパイラ" Oh sh ...!ここでVS210。 :|そのスニペットをお寄せいただきありがとうございます! – Xeo
@ Xeo:問題ありません。彼らがコンパイラをリストアップしていないことは残念ですが、VC2010がそれを必要とするのは本当に疑問です。 – GManNickG
@ Xeo - VC6はあまりにも広く使われていて、非常に標準的であることで有名です。 VS2010にはこのような問題はありません。 –