我已经看到这是一个不言自明的enable_if
for实现C++98
:
template<bool b, typename T = void>
struct enable_if {
typedef T type;
};
template<typename T>
struct enable_if<false, T> {};
但可惜我个人不明白。我看不出布尔值在哪里发挥作用。如果有人能为我打开它,我将不胜感激。
首先考虑这个:
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
. 当condition
is true
then std::enable_if<condition,T>::type
is just T
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句