c++ - 无法推导出 lambda 函数模板参数

标签 c++ visual-studio-2012

我在我的源文件中本地声明了这个模板函数:

template<typename T>
const std::wstring test(std::function<const std::wstring(T)> f, T arg)
{
    return f(arg);
}

我尝试在后续函数中使用它,如下所示:
auto run = [](const std::string address) -> const std::wstring { return L""; };
test(run, address);

但编译器提示它无法推断出 lambda“run”的模板参数。我究竟做错了什么?

编译器说:
error C2784: 'const std::wstring test(std::function<const std::wstring(T)>,T)' : could not deduce template argument for 'std::function<const std::wstring(T)>' from 'xxx::<lambda_d434160cf17ec6991f6c12a43474f9a9>'

最佳答案

你需要

std::function<const std::wstring(std::string)> run =
    [](const std::string address) { return L""; };

lambda 有自己生成的类型(在您的情况下为 xxx::<lambda_d434160cf17ec6991f6c12a43474f9a9>),并且带有 auto , run保持这种类型。另一方面,test预计 std::function<const std::wstring(T)> .

更简单(更高效),您可以制作 test函数类型的模板:
template<typename F, typename T>
const std::wstring test(F f, T arg) { return f(arg); }

关于c++ - 无法推导出 lambda 函数模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23422656/

相关文章:

c++ - 使用 Visual Studio 2015 运行时,OpenCV 无法打开视频文件

c++ - cmake 链接 glew 头文件

c++ - 在 QTreeView 中查找 QModelIndex 可见行的更简单方法

c# - 找到的程序集的 list 定义与程序集引用 C# Dll hell 不匹配

sql - Visual Studio 2012 添加数据库并创建第一个名为 users 的表

c++ - 如何将自定义分配器的完全相同状态传递给多个容器?

c++ - 我在探查器输出中看到的 __nss_passwd_lookup() 调用是关于什么的?

visual-studio - VS 2012 中的智能感知中的向下箭头是什么意思

visual-studio-2010 - Visual Studio 测试 Controller 配置错误

c++ - 定位内存泄漏