在我的课堂上,很多方法都有这样的片段:
std::string str = getSomeStr();
auto it = std::find_if(
vec.begin(),
vec.end(),
[str](const std::string& b){return str + "abc" == b;});
因此,我想存储lambda函数以重用它。但它从范围中捕获str
。我应该怎么做?
答案 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>