C++ 什么是';typename Enable=void';什么意思?

C++ 什么是';typename Enable=void';什么意思?,c++,templates,C++,Templates,我发现typename Enable=void是在 模板 结构类型特征; 但是,我找不到在这篇文章中使用的启用,这让我很困惑。模板中的typename Enable=void是什么意思 您的模板只有两个模板参数。第二个称为“Enabled”,默认类型为“void”。这是以后允许使用的一个技巧。它允许SFINAE使用模板专门化,如 template<typename T> struct RefTypeTraits<T, std::enable_if_t<some_cond

我发现
typename Enable=void
是在

模板
结构类型特征;

但是,我找不到在这篇文章中使用的
启用
,这让我很困惑。模板中的
typename Enable=void
是什么意思

您的模板只有两个模板参数。第二个称为“Enabled”,默认类型为“void”。这是以后允许使用的一个技巧。

它允许SFINAE使用模板专门化,如

template<typename T>
struct RefTypeTraits<T, std::enable_if_t<some_condition<T>::value>> {
    // ... specialization for T which respects condition
};
模板
结构RefTypeTraits{
//…T的特化,它尊重条件
};

它如何允许SFINAE?在您的示例中,未定义第二个模板参数
typename Enabled=void
。@Thomson:
std::enable\u如果成功时转换为
void
,但失败时,而不是错误时,该专门化将被丢弃。
template<typename T>
struct RefTypeTraits<T, std::enable_if_t<some_condition<T>::value>> {
    // ... specialization for T which respects condition
};