Tôi có một lớp có con trỏ hàm đến hàm hạt nhân, có thể thay đổi từ bên ngoài.C++ lambda - biến thành viên chụp
class Bar
{
public:
int i;
}
class Foo
{
public:
std::function<double()> kernel;
Bar bar;
};
int main()
{
Foo f;
f.kernel = []() -> double { return i * i; }; //this is not working obviously
}
Làm cách nào để đạt được hành vi "được trình bày", ví dụ: đọc các biến lớp bên trong lambda. Tôi có thể bỏ qua nó bằng cách vượt qua f
bên trong và viết f.bar.i
, nhưng đó không phải là giải pháp rất tốt đẹp.
Có gì sai với '[& f]() {return f.i * f.i; } '? –
@KerrekSB Tôi đã chỉnh sửa câu hỏi –
Vì vậy, về cơ bản bạn muốn gọi 'f.kernel()' và 'kernel' sẽ tự động được liên kết với' f' như nó là một hàm thành viên? – dhke