c++ - 表达式 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*
?
谢谢!
解决方案
不是type*
;它是<the member type of the whole enable_if thing>*
。
enable_if
有点像黑客;默认情况下,该type
成员只是void
,所以我们所做的一切(如果T
可以简单地破坏)就是声明一个void*
默认为0
(or nullptr
) 类型的未命名模板参数,然后我们可以完全忽略它。
我们拥有它的唯一原因是,如果T
不是一般可破坏的,则不存在这样的成员类型,type
因此这种特殊的特殊化destroy
将不存在(通过 SFINAE 的魔力)。
这有点像在万圣节时绕过你的邻居,然后不接受他们的任何糖果,因为你实际上从未想要任何糖果:你只是想看看你的邻居是否在家。他们会说“他/她/它为什么这样做?多么奇怪”,但你有你的答案,所以它确实是有目的的。
推荐阅读
- c - 从二进制文件中读取和显示时间戳
- wiremock - 如何在 Wiremock 查询参数中传递数组
- subprocess - 使用 gcloud 的 Subprocess.Popen 对象
- excel - 将日期与 excel 中的文本连接起来(北欧语言环境)
- javascript - React Native - PropTypes.bool 中的“无法读取未定义的属性‘bool’”
- python - TypeError:“NoneType”对象即使已设置也不可迭代
- python - 在 django 中面临自定义用户身份验证和 oauth2 的问题
- json - 我怎样才能将我得到的对象放入数组中?
- react-native - 如何在 React-Native 中实现 Step Progress bar?
- ios - Facebook Embed 未使用自定义 UserAgent 在 WKWebView 中加载