2017-06-13 6 views
2

C++ 11では、std::enable_ifを標準ライブラリに追加しました。条件がboolboost::enable_if_cに相当します。これは単純な条件に適していますが、その結果をvalue定数で保持する述語を使用するとすぐに、より冗長な構文​​を使用してboolにする必要があります。 これはまさにboost::enable_if_cサフィックスなし)のものです。boost :: enable_ifのstdに相当するものがないのはなぜですか?

なぜ標準ライブラリには何もないのですか?

+2

'typename my_predicate :: value'何? –

+0

[this](https://blogs.msdn.microsoft.com/ericlippert/2009/06/22/why-doesnt-c-implement-top-level-methods/)と大雑把に似ています。 – Caleth

+0

申し訳ありませんが、私の悪いです。私は型を返すメタ関数と値を返すメタ関数との間のミックスを作った。 –

答えて

3

標準ライブラリはここでは別のルートになります。 C++ 17は、::valueを返すすべての型特性の変数テンプレートショートカットを追加しました。パターンは

std::enable_if<some_constexpr_function<T1,T2>()> 

この方法では、より汎用的であるあなたは、例えば、さらにenable_ifの引数がconstexpr式の結果である可能性があり

std::enable_if<std::is_same_v<T1,T2>> 

を書くことができますたとえば、常に

template <typename... Args> 
some_trait_v = some_trait<Args...>::value; 

ですvalueメンバーが必要なものを渡すことに依存しません。

+0

'constexpr'の良い点!これは、この選択肢を正当化する説得力のある議論です。 –

関連する問題