gpt4 book ai didi

templates - 在模板中推断 lambda 返回类型

转载 作者:行者123 更新时间:2023-12-02 04:44:20 25 4
gpt4 key购买 nike

你好,我正在尝试创建一个函数,该函数将使用一些提供的参数调用作为参数提供的函数并返回其值,我当前的方法如下

  #include <functional>
#include <iostream>
#include <type_traits>


template <typename Res,typename... T>
auto func(typename std::common_type<std::function<Res(T...)>>::type f, T... values) -> decltype(f(values...)) {
f(values...);
}

int fx(int x,int y){return x+y; }
int main() {
>> func([](int x, int y, int z) { std::cout << (x*y*z) << std::endl; }, 3, 6, 8);
return 0;
}

如果我用 void 替换 Res 并删除 auto&&decltype 它可以工作,但不知何故我无法获得正确的返回类型。

最佳答案

加入一个额外的选择(因为上面的内容有时会太多而难以消化)。

使用 C++17,您可以:

template <typename F, typename... T, typename RES = std::invoke_result<F, T...>>
RES func(F f, T... values) {
return f(values...);
}

然后还有 C++17 之前的 std::result_of

https://en.cppreference.com/w/cpp/types/result_of

关于templates - 在模板中推断 lambda 返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20121262/

25 4 0