mti*_*ijn 2 c++ visual-studio-2012
我在源文件中本地声明了这个模板函数:
template<typename T>
const std::wstring test(std::function<const std::wstring(T)> f, T arg)
{
return f(arg);
}
Run Code Online (Sandbox Code Playgroud)
我尝试在后续函数中使用它,如下所示:
auto run = [](const std::string address) -> const std::wstring { return L""; };
test(run, address);
Run Code Online (Sandbox Code Playgroud)
但编译器抱怨它无法推导出 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>'
Run Code Online (Sandbox Code Playgroud)
你需要
std::function<const std::wstring(std::string)> run =
[](const std::string address) { return L""; };
Run Code Online (Sandbox Code Playgroud)
lambda 有自己的生成类型(xxx::<lambda_d434160cf17ec6991f6c12a43474f9a9>在您的情况下),并且 with 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); }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
673 次 |
| 最近记录: |