Xét đoạn mã sau:C++ Lambda: Truy cập phương pháp tĩnh trong lambda dẫn đến lỗi 'này không bị chiếm đóng cho chức năng lambda này'
//this is what I want to call; I cannot modify its signature
void some_library_method(void(*fp)(void));
class Singleton{
public:
static Singleton *instance();
void foo();
void bar();
private:
Singleton();
};
void Singleton::foo(){
//this leads to an error ('this' was not captured for this lambda function)
void(*func_pointer)(void) = []{
Singleton::instance()->bar();
};
some_library_method(func_pointer);
}
Tôi muốn gọi một chức năng tôi không thể thay đổi (xem some_library_method
trên) mà hy vọng một con trỏ hàm làm đối số. Cuộc gọi nên được thực hiện trong một thành viên lớp học foo()
. Tôi biết rằng tôi không thể truy cập vào các thành viên lớp học ở đó, nhưng tất cả những gì tôi muốn làm là truy cập Class Singleton theo một cách tĩnh (lấy ví dụ singleton).
Có cách nào cải cách biểu thức lambda để hiển thị trình biên dịch mục tiêu, g ++ v4.7.2, rằng nó thực sự không cần tham chiếu đến this
?
tuyệt vời, cảm ơn bạn – muffel