从Lambda C ++ 14返回完美转发的参数

时间:2019-04-24 17:14:16

标签: c++

auto myLambda = [](auto&& val_)
{
    val_ *= 2;
    return std::forward<decltype(val_)>(val_);
};

int someNum = 55;

auto&& ret1 = myLambda(3);
auto&& ret2 = myLambda(someNum);

我正在尝试使用lambda的高级功能,但是我无法通过完美转发来返回参数。 ret1ret2变量都扩展为int &&。我很确定我可以将args从lamda对象内部完美地转发到另一个函数。我尝试将返回类型更改为decltype(auto),但没有运气。我们可以说lambda无法通过完美的转发方式放心返回吗?

如果我为此编写模板函数,则可以实现完美的转发。

1 个答案:

答案 0 :(得分:6)

lambda不会返回对val_的引用(它只会返回val_的值)。如果要执行此操作,则必须显式提供返回类型:

auto myLambda = [](auto&& val_) -> decltype(val_)
{
    val_ *= 2;
    return std::forward<decltype(val_)>(val_);
};