我试图了解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,则选择部分模板特殊化,因此如果选择:
答案 0 :(得分:5)
为什么在enable_if中只有条件而不指示第二个模板 参数?
因为默认的void
就可以了。
那么“ type *”是什么类型?无效*?如果是这样,为什么?
是的,如果::type
,void
将是std::is_trivially_destructible<T>::value == true
类型,这将导致::type*
-> void*
。
为什么是指针?
因此,我们可以轻松为其设置默认值0
。
我们使用std::enable_if
的目的是检查某些属性(在这种情况下,检查T
是否可微毁),如果这些结果导致false
,那么我们将其用于创建格式错误的代码,从而从重载解析中消除此功能。
如果std::is_trivially_destructible<T>::value == false
则::type
将不存在,因此代码格式错误。在SFINAE中,这很方便,因为将不考虑此重载以进行解决。