c++ - 为什么当我们将 lambda 发送到 std::function 时,自动模板类型推导不起作用?

标签 c++ templates c++11 lambda

<分区>

为什么下面的代码不能编译?

template <class T>
void sort2( std::function<bool(T, T)> sort_func){
}

int main()
{
    sort2( [](int  l, int  r)->bool{return  r > l; });
}


    error C2784: 'void sort2(std::function<bool(T,T)>)' :
 could not deduce template argument for 'std::function<bool(T,T)>'

有没有办法在不显式说明模板参数的情况下编译该代码?

sort2<int>( [](int  l, int  r)->bool{return  r > l; });

最佳答案

std::function 是一个类型删除类,它可以在其他类型中键入删除 lambda。

它与 lambda 的类型无关。

只有几个很好的理由可以推断类型删除类的类型(主要是重载)。您可能想要的是一个概念 requires 子句或类似的概念,它在 C++1y 之后的某个时候出现,并且比推导 std::function 的类型更好地解决问题。

关于c++ - 为什么当我们将 lambda 发送到 std::function 时,自动模板类型推导不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23888228/

相关文章:

c++ - 将 initialOwner 设置为 TRUE 的 CreateMutex 使创建者进程保持互斥直到完成

c++ - 使用页面文件进行缓存?

c++ - 什么是 Vb.net 等同于 C++ 中的 1.0e-5?

c++ - std::string 使用 bool 初始化

c++ - 使用基类中的函数作为派生类中的模板

c++ - 意外的输出

c++ - 根据元素的特征对 vector 进行排序

c++ - C++ 中的策略模式与泛型

php - 标准 HTML 和 CSS 到 wordpress 页面

c++ - 避免空指针