我正在尝试了解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中,这很方便,因为将不考虑此重载以进行解决.