在C++ 11中,std::enable_if
被添加到標準庫中。它相當於boost::enable_if_c
,其條件是bool
。這適用於相當簡單的條件,但只要使用謂詞將常量保留爲value
,則必須使用更詳細的構造將其變爲bool
。 這正是boost::enable_if
(沒有_c
後綴)。爲什麼沒有std等效的boost :: enable_if?
爲什麼標準庫中沒有等價物?
在C++ 11中,std::enable_if
被添加到標準庫中。它相當於boost::enable_if_c
,其條件是bool
。這適用於相當簡單的條件,但只要使用謂詞將常量保留爲value
,則必須使用更詳細的構造將其變爲bool
。 這正是boost::enable_if
(沒有_c
後綴)。爲什麼沒有std等效的boost :: enable_if?
爲什麼標準庫中沒有等價物?
標準庫在這裏有不同的路線。 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
成員的內容。
用'constexpr'好點!這是一個令人信服的理由來證明這一選擇。 –
'typename my_predicate :: value'什麼? –
與[this]大致相當(https://blogs.msdn.microsoft.com/ericlippert/2009/06/22/why-doesnt-c-implement-top-level-methods/) – Caleth
對不起,我的不好。我在返回類型和返回值的元函數之間進行了混合。 –