thể trùng lặp:
Should templated functions take lambda arguments by value or by rvalue reference?Truyền functors theo giá trị hoặc bằng C++ 11 Universal Reference?
C++ chức năng thư viện chuẩn mất functor (con trỏ hàm hoặc đối tượng chức năng) lập luận bởi giá trị, như vậy:
template <typename F>
void apply(F func)
{
func();
}
.. .Nhưng nó sẽ không tốt hơn để vượt qua các functors bởi Universal Reference? Cũng giống như vậy:
template <typename F>
void apply(F&& func)
{
func();
}
Bằng cách này bạn có thể vượt qua đối tượng chức năng mà duy trì trạng thái, và được tiếp cận với trạng thái (có thể sửa đổi) sau khi chức năng bậc cao đã trở lại.
Các mẫu được mở rộng/giải quyết tại thời gian biên dịch. Làm thế nào họ có thể biết về nhà nước trong thời gian biên dịch? –
Lưu ý rằng với lần đầu tiên bạn luôn có thể sử dụng trình bao bọc tham chiếu để tránh một bản sao. –
@Manoj R: Ý tôi là: Bạn có một biến đối tượng chức năng fn_obj, bạn gọi áp dụng (fn_obj), và sau đó bạn có quyền truy cập vào fn_obj.state, có thể đã được sửa đổi bởi lệnh gọi để áp dụng – TommiT