Tôi tự hỏi liệu có thể viết một hàm trả về hàm lambda trong C++ 11 hay không. Tất nhiên một vấn đề là làm thế nào để khai báo chức năng như vậy. Mỗi lambda có một kiểu, nhưng kiểu đó không thể hiện rõ trong C++. Tôi không nghĩ rằng điều này sẽ làm việc:Chức năng trả về biểu thức lambda
auto retFun() -> decltype ([](int x) -> int)
{
return [](int x) { return x; }
}
Cũng không này:
int(int) retFun();
Tôi không nhận thấy bất kỳ chuyển đổi tự động từ lambdas đến, nói rằng, con trỏ đến chức năng, hoặc một số ví dụ. Là giải pháp duy nhất thủ công một đối tượng chức năng và trả lại nó?
Để thêm những gì đã được nói, chức năng lambda không quốc tịch có thể chuyển đổi thành con trỏ hàm. –
IMO tùy chọn đầu tiên của bạn sẽ không hoạt động vì lambda trong 'decltype' không giống như trong phần tử hàm và do đó có một kiểu khác (ngay cả khi bạn đưa vào câu lệnh return) – Motti
Bằng cách này, nếu một lambda có một mệnh đề capture trống, nó có thể được chuyển đổi hoàn toàn thành một con trỏ trỏ tới hàm. – GManNickG