相关疑难解决方法(0)

在lambda中捕获完美转发的变量

template<typename T> void doSomething(T&& mStuff)
{
    auto lambda([&mStuff]{ doStuff(std::forward<T>(mStuff)); });
    lambda();
}
Run Code Online (Sandbox Code Playgroud)

mStuff使用&mStuff语法捕获完美转发的变量是否正确?

或者是否有针对完美转发变量的特定捕获语法?

编辑:如果完美转发的变量是参数包怎么办?

c++ lambda perfect-forwarding c++11 c++14

43
推荐指数
5
解决办法
9719
查看次数

c ++ lambdas如何从上部范围捕获可变参数包

我研究了泛型lambdas,稍微修改了这个例子,所以我的lambda应该捕获上层lambda的可变参数包.所以基本上给予上层lambda的是(auto&&...)- 应该以某种方式在[=]块中捕获.

(完美的转发是另一个问题,我很好奇这可能在这里吗?)

#include <iostream>
#include<type_traits>
#include<utility>


// base case
void doPrint(std::ostream& out) {}

template <typename T, typename... Args>
void doPrint(std::ostream& out, T && t, Args && ... args)
{
    out << t << " ";                // add comma here, see below
    doPrint(out, std::forward<Args&&>(args)...);
}

int main()
{
    // generic lambda, operator() is a template with one parameter
    auto vglambda = [](auto printer) {
        return [=](auto&&... ts) // generic lambda, ts is a parameter pack
        { …
Run Code Online (Sandbox Code Playgroud)

c++ lambda variadic-templates generic-lambda c++14

11
推荐指数
2
解决办法
4653
查看次数