bla*_*zio 1 c++ templates metaprogramming enable-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";
}
Run Code Online (Sandbox Code Playgroud)
如果enable_if中的表达式为true,则选择部分模板特化,因此如果选择:
为什么在enable_if只是条件而没有指示第二个模板参数?
因为默认void就好了.
什么类型的"类型*"呢?无效*?如果是这样,为什么?
是的,::type将是voidif 类型std::is_trivially_destructible<T>::value == true,这将导致::type*- > void*.
为什么是指针?
所以我们可以很容易地给它一个默认值0.
我们所使用std::enable_if的只是检查某些属性(在这种情况下检查是否T可以轻易破坏),如果这些属性导致false我们使用它来创建格式错误的代码,从而从过载解决中消除此功能.
如果std::is_trivially_destructible<T>::value == false那时::type不存在,那么代码就会形成错误.在SFINAE中,这很方便,因为这种过载将不会被考虑用于解决.
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |