c++ - 如何使用模板构造函数定义推导指南?
问题描述
为了简化我的问题,我将std::unique_lock
用作解释的工具。std::unique_lock 有一个模板参数,即互斥锁。但是,它的构造函数也是一个模板函数unique_lock(TMutex &, const chrono::duration<_Rep, _Period>&)
。
当一个人使用它时,可以写:
auto lock = std::unique_lock(my_mutex, 5s);
所以,问题是:如何为此写出演绎指南(不改变行为),怎么做?
到目前为止我最好的尝试:
template<typename _Mutex>
template<typename _Rep, typename _Period>
unique_lock(_Mutex &, const chrono::duration<_Rep, _Period>&) -> unique_lock<_Mutex>;
不幸的是,clang 不接受这一点:
错误:模板特化或离线模板定义中的多余模板参数列表
解决方案
GCC 对此有更好的错误消息:
错误:模板参数列表过多
您可以将其更改为单个模板参数列表,如下所示:
template<typename _Mutex, typename _Rep, typename _Period>
unique_lock(_Mutex &, const chrono::duration<_Rep, _Period>&) -> unique_lock<_Mutex>;
它有效。
从您问题中的评论来看,您似乎在混合 CTAD 和专业化。
你没有专攻unique_lock
. 不是成员函数,也不是构造函数,您只是在定义一个推导指南。更具体地说,来自cppreference:
用户定义的推导指南的语法是带有尾随返回类型的函数声明的语法 [...] 推导指南不是函数 [...]
请注意,它具有声明的语法,而不是特化。只是和你预想的不一样。
推荐阅读
- javascript - 如何在屏幕锁定或最小化浏览器期间禁用移动设备上的网页音频?
- slack-api - 如何让标准块套件交互组件看起来像模态输入
- c# - FIX 连接停止
- html - 乳胶到html的转换
- javascript - Framer Motion 退出动画没有在带有 react-router-dom 的手风琴上触发
- python-3.x - TypeError:只能在递归函数上将 str(不是“NoneType”)连接到 str
- python-3.x - 在不同 URL 的 python/django 上调用相同的 API
- android - 如何处理不断退出并使用 Firebase 电话身份验证的用户?
- javascript - 如何修复 Google App 脚本错误异常:数据存储错误(第 1 行,文件“代码”)?
- c++ - 将 eclipse 格式化转换为 .clang-format 或在 vscode 中使用 eclipse 格式化程序