首页 > 解决方案 > 表达式 std::enable_if 中的 type* 是什么

问题描述

有人可以向我解释一下是什么type*意思吗?

我在 std::enable_if 这个例子的文档中看到:

// #3, enabled via a parameter
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";
 }

为什么我们在这里使用 type 以及什么是type*

谢谢!

标签: c++templatesenable-if

解决方案


不是type*;它是<the member type of the whole enable_if thing>*

enable_if有点像黑客;默认情况下,该type成员只是void,所以我们所做的一切(如果T可以简单地破坏)就是声明一个void*默认为0(or nullptr) 类型的未命名模板参数,然后我们可以完全忽略它。

我们拥有它的唯一原因是,如果T不是一般可破坏的,则不存在这样的成员类型type因此这种特殊的特殊化destroy将不存在(通过 SFINAE 的魔力)。

这有点像在万圣节时绕过你的邻居,然后不接受他们的任何糖果,因为你实际上从未想要任何糖果:你只是想看看你的邻居是否在家。他们会说“他/她/它为什么这样做?多么奇怪”,但你有你的答案,所以它确实是有目的的。


推荐阅读