2017-06-13 73 views
2

在C++ 11中,std::enable_if被添加到標準庫中。它相當於boost::enable_if_c,其條件是bool。這適用於相當簡單的條件,但只要使用謂詞將常量保留爲value,則必須使用更詳細的構造​​將其變爲bool。 這正是boost::enable_if(沒有_c後綴)。爲什麼沒有std等效的boost :: enable_if?

爲什麼標準庫中沒有等價物?

+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的類型特徵添加了可變模板快捷鍵。該模式是始終

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

例如,你可以寫

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

而且爲enable_if的說法可能是constexpr表達式的結果,例如

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

這種方式是比較通用的並不依賴於傳遞必須具有value成員的內容。

+0

用'constexpr'好點!這是一個令人信服的理由來證明這一選擇。 –

相關問題