我试图将结果类型的std :: bind与lambda结合起来。我尝试了以下两个:
template<typename F>
typename std::result_of<std::bind(F,uint)> func(F f, uint i);
这无论出于何种原因都无效。我也尝试过使用decltype:
template<typename F>
decltype(std::bind(F(),uint()) func(F f, uint i);
这不起作用,因为当我使用带有lambda f的模板函数时,它会抱怨lambdas有一个删除的默认构造函数。
你能帮帮我吗?我试图在网上找到答案却没有成功。谢谢!
答案 0 :(得分:5)
我建议使用decltype(auto)
,如下所示:
template<typename F>
decltype(auto) func(F f, uint i) { // ... }
因此返回类型将由编译器推断。
然后,我不认为std::result_of
在这种情况下是合适的工具。
但是使用decltype
,您可能也会完成@ Jarod42在评论中提到的内容:使用尾随返回类型:
template<typename F>
auto func(F f, uint i) -> decltype(std::bind(f, i)) { // ... }
也适用于 C ++ 11 (第一个解决方案需要 C ++ 14 支持)。