我已經看到這是一個不言自明的enable_iffor實作C 98:
template<bool b, typename T = void>
struct enable_if {
typedef T type;
};
template<typename T>
struct enable_if<false, T> {};
但可惜我個人不明白。我看不出布林值在哪里發揮作用。如果有人能為我打開它,我將不勝感激。
uj5u.com熱心網友回復:
首先考慮這個:
template<bool b>
struct foo {
static const bool B = b;
};
template <>
struct foo<false> {
static const bool B = false;
};
它是一個主要模板和一個專業。一般情況下foo<b>::B只是b. 在特殊情況下,當b == false專業化開始并且foo<false>::B是false。
您的示例std::enable_if不同有兩個原因:A)它使用部分專業化。專業化適用于任何型別T和b == false;. B)在專業化中沒有type成員別名。這就是整個目的std::enable_if。當條件為假時,std::enable_if< condition, T>::type替換失敗,因為特化沒有type. 當conditionis truethen std::enable_if<condition,T>::typeis just T。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/491225.html
