完美地转发lambda并将其作为函数对象存储在C++;14/17
我们如何完美地转发lambda并将其存储到具有固定签名的给定函数对象?lambda实际上是由用户定义的,可以返回整数,也可以不返回任何参数。如果给定的lambda没有返回值,包装器应该返回一个默认值(比如-1),或者只返回lambda中的任何值完美地转发lambda并将其作为函数对象存储在C++;14/17,lambda,c++14,Lambda,C++14,我们如何完美地转发lambda并将其存储到具有固定签名的给定函数对象?lambda实际上是由用户定义的,可以返回整数,也可以不返回任何参数。如果给定的lambda没有返回值,包装器应该返回一个默认值(比如-1),或者只返回lambda中的任何值 std::function<int()> func; auto L1 = [](char joe) { return 1; } auto L2 = [](char joe, float num) { // no return }
std::function<int()> func;
auto L1 = [](char joe) {
return 1;
}
auto L2 = [](char joe, float num) {
// no return
}
我不知道实施这样的事情是否可行。任何帮助都将不胜感激。lambda是否需要使用不同的参数值多次调用?是的……这就是我不知道的原因。我不明白您的代码片段中缺少了什么功能。。。是否希望将
L1
复制/移动到结果函数对象中,而不是仅通过引用捕获?是否需要使用不同的参数值多次调用lambda?是的…这让我无法理解您的代码段中缺少了哪些功能。。。是否希望将L1
复制/移动到结果函数对象中,而不是仅通过引用捕获?
template <
typename C, typename... T, typename R = std::result_of_t<C(T...)>,
std::enable_if_t<std::is_same_v<void, R> *= nullptr >
>
auto make_function(C&& c, T&&... args) {
return [&]() { c(args...); return -1; }
}
template <
typename C, typename... T, typename R = std::result_of_t<C(T...)>,
std::enable_if_t<std::is_same_v<int, R> *= nullptr >
>
auto make_function(C&& c, T&&... args) {
return [&]() { return c(args...); }
}
func = make_function(L1, 'a');
func = make_function(L2, 'b', 1.2f);