C++ 11: Số Mỗi biểu thức lambda có, tôi trích dẫn (§5.1.2/3):
[...] một độc đáo, chưa đặt tên lớp phi đoàn loại [ ...]
Điều này có nghĩa là bạn không thể biết loại lambda mà không biết biểu thức tương ứng trước.
Bây giờ, nếu bạn không nắm bắt bất cứ điều gì, bạn có thể sử dụng chuyển đổi thành con trỏ hàm và trả về (kiểu con trỏ hàm), nhưng điều đó khá hạn chế.
Như @Luc lưu ý trong Lounge, nếu bạn sẵn sàng để thay thế bạn make_counter
(và nếu nó không phải là một mẫu, hoặc quá tải, hoặc một cái gì đó), sau đây sẽ làm việc:
auto const make_counter = [](int i = 0) {
return [i]() mutable { return i++; };
};
C++ 1y: Có, thông qua khấu trừ loại trả lại cho các chức năng thông thường (N3582).
Biểu thức lambda đó cũng không hợp lệ C++ 11. Việc khấu trừ kiểu trả về sẽ không hoạt động nếu cơ thể chứa nhiều hơn chỉ là 'biểu thức trả về;' (§5.1.2,4) –
Về mặt kỹ thuật bạn có thể trả về 'my_not_STD_function' chỉ cần thực hiện một cái gì đó về cơ bản tương đương ... – Yakk
@Arne: Đổ lỗi OP để chỉnh sửa ...: P Đã sửa. – Xeo