Tôi đang bắt đầu phát triển các ứng dụng bằng cách sử dụng C++ 11 lambdas và cần phải chuyển đổi một số loại thành con trỏ hàm. Đây hoạt động hoàn hảo trong GCC 4.6.0:C++ 11 lambdas đến Con trỏ Chức năng
void (* test)() = []()
{
puts("Test!");
};
test();
Vấn đề của tôi là khi tôi cần phải sử dụng chức năng hoặc phương pháp biến địa phương trong lambda:
const char * text = "test!";
void (* test)() = [&]()
{
puts(text);
};
test();
G ++ 4.6.0 cung cấp cho các mã lỗi dàn diễn viên:
main.cpp: In function 'void init(int)':
main.cpp:10:2: error: cannot convert 'main(int argc, char ** argv)::<lambda()>' to 'void (*)()' in initialization
Nếu sử dụng auto, nó hoạt động ok:
const char * text = "Test!";
auto test = [&]()
{
puts(text);
};
test();
Câu hỏi của tôi là: làm cách nào để tạo loại cho lambda với [&]? Trong trường hợp của tôi, tôi không thể sử dụng STL std :: function (vì chương trình của tôi không sử dụng C++ RTTI và EXCEPTIONS runtime), và nó có thực hiện đơn giản chức năng để giải quyết vấn đề này?
Âm thanh như một ví dụ về [vấn đề XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –
Bạn không thể chuyển đổi một lambda chụp sang một con trỏ hàm. Giải thích những gì bạn đang cố gắng làm. –
Bạn đã giải thích (một cách tồi tệ) một giải pháp đã thử, trong khi không mô tả vấn đề thực tế của bạn là gì. Vui lòng cho chúng tôi biết vấn đề thực tế của bạn là gì – thecoshman