1

我正在尝试将结果类型的 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 有一个已删除的默认构造函数。

你能帮帮我吗?我试图在网上找到答案,但没有成功。

谢谢!

4

1 回答 1

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支持)。

于 2018-01-11T19:24:15.360 回答