我在我的源文件中本地声明了这个模板函数:
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/