c++ - 为什么我不能将 lambdas 分配给函数参数作为默认值?
问题描述
采取以下功能:
template<typename T>
decltype(auto) find_median(T begin,
T end,
bool sorted = false,
auto comparison = [](auto a, auto b){return a < b;}){
assert(begin != nullptr);
assert(end != nullptr);
return sorted ? find_median_sorted(begin, end) : find_median_unsorted(begin, end, comparison);
}
请注意,我将comparison
参数设置为默认值[](auto a, auto b){return a < b;}
。所以如果我这样调用这个函数:find_median(std::addressof(arr), std::addressof(arr[9]))
where arr
is an std::array
,这应该可以工作。但它不起作用,有人可以告诉我为什么吗?
解决方案
您可以为已知类型提供默认值,但不能为这样的推导类型提供默认值。这不是语言支持的东西。
您必须为类型和值提供默认值:
template<typename T, typename Cmp = std::less<>>
decltype(auto) find_median(T begin,
T end,
bool sorted = false,
Cmp comparison = {})
{
// ...
}
推荐阅读
- laravel - 选择关系表中的某个字段
- python-3.x - tkinter 中使用 PhotoImage 的两个图像
- html - lxml xpath - 找不到正文标签
- java - Java.crypt/ PBE“问题”
- c# - 在所有客户端上仅在 Blazor 中运行一个方法实例(倒计时函数)
- email - Gerrit如何更改发送电子邮件的通知?(虚拟主机)
- javascript - 用户上传图像的安全性
- jpa - 如何解决这个简单但未解决的 JPA 分页问题?
- angular - 将多个现有 Angular 项目添加到 NX 工作区/monorepo
- python - python tkinter中的秒表