理解std::enable_if:破解其目的和實現
理解std::enable_if:破解其目的和實現雖然std::enable_if 的本質是在某些上下文中掌握的,但它的錯綜複雜的問題,特別是模板語句中的第二個參數和對std::enable_if 的賦值,仍然是個謎。深入研究其工作原理將解開這些謎團。
std::enable_if 的要點template struct enable_if {};
template struct enable_if { typedef T type; };
template
至關重要的是,型別別名 typedef T 型別僅在 Cond 為 true 時定義。
揭示用法template
typename std::enable_if<:numeric_limits>::is_integer, void>::type foo(const T &bar) { isInt(bar); }
模板 型別名稱std::enable_if<:numeric_limits>::is_integer, void>::type foo(const T &bar) { isInt(bar); }
這裡,foo的回傳型別由std ::enable_if<:numeric_limits>::is_integer, void>::type定義。由於 std::numeric_limits
template::value, int>::type = 0>
void foo(const T& bar) { isInt(); }
template
= 0 用來預設第二個範本參數。這允許使用 foo
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3