c-通过参数启用std :: enabled_if时如何工作

我正在尝试了解enable_if的工作原理,并且我几乎了解除了场景3中的所有内容

https://en.cppreference.com/w/cpp/types/enable_if

template<class T>
void destroy(T* t, 
         typename 
std::enable_if<std::is_trivially_destructible<T>::value>::type* = 0) 
{
    std::cout << "destroying trivially destructible T\n";
}

如果enable_if中的表达式为true,则选择部分模板专用化,因此如果选择:

>为什么在enable_if中只有条件而不指示第二个模板参数?
>那么什么是“类型*”?无效*?如果是这样,为什么?
>为什么是指针?

解决方法:

why in enable_if is only condition without indicating second template
parameter ?

因为默认的void就可以了.

What type is “type*” then ? void* ? if so, why ?

是的,如果std :: is_trivially_destructible< T> :: value == true,则:: type将为void类型,这将导致:: type *->为void *.

Why is it pointer ?

因此,我们可以轻松为其指定默认值0.

我们使用std :: enable_if进行的所有操作是检查某些属性(在这种情况下,检查T是否可微分解),如果这些结果为false,则使用它来创建格式错误的代码,从而从重载中消除此函数解析度.

如果std :: is_trivially_destructible< T> :: value == false,则:: type将不存在,因此代码格式错误.在SFINAE中,这很方便,因为将不考虑此重载以进行解决.

上一篇:python-如何使用模板(例如Jinja2)将列值列表呈现到表中


下一篇:c-使用std :: is_same在if语句中访问类成员