Bạn không thể có một auto
tham số. Về cơ bản bạn có hai lựa chọn:
Tùy chọn # 1: Sử dụng std::function
như bạn đã hiển thị.
Tùy chọn # 2: Sử dụng tham số mẫu:
template<typename F>
void f(F &lambda) { }
Tùy chọn số 2, trong một số trường hợp, có thể hiệu quả hơn, vì nó có thể tránh phân bổ heap tiềm năng cho đối tượng hàm lambda được nhúng, nhưng chỉ khả thi nếu f
có thể được đặt trong tiêu đề như một hàm mẫu. Nó cũng có thể làm tăng thời gian biên dịch và dấu chân I-cache, cũng như bất kỳ mẫu nào. Lưu ý rằng nó cũng có thể không có tác dụng, vì nếu đối tượng hàm lambda đủ nhỏ, nó có thể được biểu diễn nội tuyến trong std::function
đối tượng.
const&
?