Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 表达式std::enable_if中的*类型是什么_C++_Templates_Enable If - Fatal编程技术网

C++ 表达式std::enable_if中的*类型是什么

C++ 表达式std::enable_if中的*类型是什么,c++,templates,enable-if,C++,Templates,Enable If,有人能给我解释一下type*是什么意思吗 我在std::enable_的文档中看到,如果以下示例: // #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 &l

有人能给我解释一下
type*
是什么意思吗

我在std::enable_的文档中看到,如果以下示例:

// #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";
 }
/#3,通过参数启用
模板
空洞破坏(
T*T,
typename std::enable_if::type*=0
){

std::cout它不是
类型*
;它是
*

enable\u if
是一个小技巧;默认情况下,
type
成员只是
void
,因此我们所做的一切(如果
T
是可破坏的)就是声明一个类型为
void*
的未命名模板参数,默认值为
0
(或
nullptr
),我们可以完全忽略它

我们拥有它的唯一原因是,如果
T
不是微不足道的可破坏的,那么就不存在这样的成员类型
type
,因此
destroy
的这种特殊专业化将不存在(借助于SFINAE的魔力)


这有点像在万圣节前夜去你的邻居家转转,但不接受他们的糖果,因为你从来都不想要糖果:你只是想看看你的邻居是否在家。他们会说“他/她/它为什么这样做?多奇怪啊”但是你有你的答案,所以它确实是有目的的。

它是一个指针,指向
std::enable\u if
if
std::is\u minality\u destructible::value==true
所公开的类型。它公开的默认类型是
void

请记住,使用SFINAE,我们只是试图触发一个替换错误,我们可以通过尝试使用
std::enable\u if
typedef type
来实现这一点。如果
std::is\u微不足道\u destructible::value
is
false
type
将不存在,并且将跳过该函数以解决过载问题

我们也可以指定我们自己的类型,也许这就清楚了:

std::enable_if<true, int>::type* intPointer;

如果你不想要糖果,我就要了。@SombreroChicken对不起,糖果的失败不是错误:D
template <typename T>
struct enable_always
{
  typedef T type;
};