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
ifstd::is\u minality\u destructible::value==true
所公开的类型。它公开的默认类型是void
请记住,使用SFINAE,我们只是试图触发一个替换错误,我们可以通过尝试使用std::enable\u if
的typedef type
来实现这一点。如果std::is\u微不足道\u destructible::value
isfalse
则type
将不存在,并且将跳过该函数以解决过载问题
我们也可以指定我们自己的类型,也许这就清楚了:
std::enable_if<true, int>::type* intPointer;
如果你不想要糖果,我就要了。@SombreroChicken对不起,糖果的失败不是错误:D
template <typename T>
struct enable_always
{
typedef T type;
};