理解 C++98 中的 enable_if 实现

砂管

我已经看到这是一个不言自明的enable_iffor实现C++98

template<bool b, typename T = void>
struct enable_if {
    typedef T type;
};

template<typename T>
struct enable_if<false, T> {};

但可惜我个人不明白。我看不出布尔值在哪里发挥作用。如果有人能为我打开它,我将不胜感激。

463035818_is_not_a_number

首先考虑这个:

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>::Bfalse

您的示例std::enable_if不同有两个原因:A)它使用部分专业化。专业化适用于任何类型Tb == false;. B)在专业化中没有type成员别名。这就是整个目的std::enable_if如果条件为假,则std::enable_if< condition, T>::type替换失败,因为特化没有type. conditionis truethen std::enable_if<condition,T>::typeis just T

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章