存储lambda函数,将范围变量捕获为要重用的类成员

时间:2015-02-05 13:59:25

标签: c++ lambda

在我的课堂上,很多方法都有这样的片段:

std::string str = getSomeStr();

auto it = std::find_if(
vec.begin(), 
vec.end(), 
[str](const std::string& b){return str + "abc" == b;});

因此,我想存储lambda函数以重用它。但它从范围中捕获str。我应该怎么做?

2 个答案:

答案 0 :(得分:3)

如果我理解正确的话......

class MyOperation {
    std::string s;
public:
    MyOperation(std::string s) : s(s) { }

    operator()(const std::string& b) {
        return s + "abc" == b;
    }
};

用法:

std::string str = getSomeStr();

auto it = std::find_if(
    vec.begin(), 
    vec.end(), 
    MyOperation(str));

您不必使用str临时用户,或者MyOperation仅保留std::string个引用。这取决于你想要达到的目标。


当然,从技术上讲,你可以这样做:

auto myOperation(std::string s) { 
    return [&s](const std::string& b) {
        return s + "abc" == b;
    };
}

但坦率地说,我不明白这一点。

答案 1 :(得分:0)

如何通过引用捕获,然后在每次使用之前分配给该引用:

<body><h1>Goodbye</h1></body>