'typename Enable = void'是什么意思?

What does 'typename Enable = void' mean?

本文关键字:意思 是什么 Enable typename void      更新时间:2023-10-16

我发现在ProtoBuf、中定义了typename Enable = void

template<typename T, typename Enable = void>
struct RefTypeTraits;

但是,我找不到这个头文件中使用了Enable,这让我很困惑。typename Enable = void在模板中是什么意思?

这是为了允许SFINAE与模板专业化,比如:

template <typename T>
struct RefTypeTraits<T, std::enable_if_t<some_condition<T>::value>>
{
    // ... specialization for T which respects condition
};

自从C++20以来,我们可以专门处理概念,以避免这个所需的额外模板参数。

您的模板只有两个模板参数。第二个名为"已启用",默认类型为"无效"。这是一个稍后允许SFINAE的技巧。