Ví dụ giả sau đây có thể không thực sự có ý nghĩa trong thế giới thực. Nhưng nó giải thích câu hỏi. Tôi có một số class Foo
với các thành viên firstname
và lastname
. Hàm ForEachMessage
lấy một lambda. Tôi muốn nó chỉ chụp firstname
của Foo
nhưng không chỉ chụp lastname
. Làm thế nào để đạt được điều đó?Làm cách nào để chụp một số biến thành viên (nhưng không phải tất cả) của một lớp với C++ lambda
#include <iostream>
#include <vector>
#include <functional>
using namespace std;
vector<string> messagesList;
void ForEachMessage(function<void(const string&)>callBack)
{
for (const auto& str : messagesList) {
callBack(str);
}
}
class Foo {
public:
std::string firstname;
std::string lastname;
void say() {
ForEachMessage([this](const std::string& someMessage)
{
cout << firstname << ": " << someMessage << endl;
});
// Error: firstname in capture list doesn't name a variable
// ForEachMessage([firstname](const std::string& someMessage)
// {
// cout << firstname << ": " << someMessage << endl;
// });
// Error: expect ',' or ']' in lambda capture list
// ForEachMessage([this->firstname](const std::string& someMessage)
// {
// cout << firstname << ": " << someMessage << endl;
// });
}
};
int main(int argc, const char * argv[]) {
Foo foo;
foo.firstname = "Yuchen";
foo.lastname = "Zhong";
messagesList.push_back("Hello, World!");
messagesList.push_back("Byebye, World!");
foo.say();
return 0;
}
"Không hoạt động" là mô tả sự cố hữu ích nhất trên thế giới. – molbdnilo
@molbdnilo, cảm ơn nhận xét. Tôi cũng đã thêm thông báo lỗi. –
[Sửa nhanh] (http://coliru.stacked-crooked.com/a/131b92770d94e458). Tự hỏi nếu có một cách tốt hơn mặc dù. –