2009-11-22 30 views
6

Tôi đang đi qua tăng :: asio ví dụ. Tôi đang tìm kiếm tại Example 4Boost :: asio async_wait chữ ký handler

gì là khó hiểu là, các WaitHandler trong ví dụ này có chữ ký

trống in (này)

Nhưng cuộc gọi async_wait hy vọng một handler mà

chữ ký chức năng của trình xử lý phải là:

xử lý void ( const boost :: system :: error_code & lỗi // Kết quả hoạt động. );

Source: Boost documentation

Kể từ loại tham số là một phần của chữ ký của một chức năng, tại sao trong ví dụ trên, async_wait chấp nhận một handler có tham số là không loại boost :: Hệ thống :: error_code?

THanks.

Trả lời

11

Khi bạn quan sát chính xác, phương thức async_wait chấp nhận hàm xử lý lấy một tham số (const boost :: system :: error_code &). Nhưng trong ví dụ Timer.4, cuộc gọi đến async_wait được truyền qua tăng ràng buộc như sau:

timer_.async_wait(boost::bind(&printer::print, this)); 

Các boost :: ràng buộc trả về một đối tượng hàm trong đó đề cập đến phương pháp in cho lớp máy in cho đối tượng được tham chiếu bởi này. Đối tượng hàm này được gọi bằng phương thức async_wait với tham số lỗi (vì đó là chữ ký mà nó mong đợi). Nhưng tham số lỗi được bỏ qua âm thầm vì nó không được tham chiếu bởi ràng buộc.

Số boost::bind documentation chính thức cung cấp thêm chi tiết về tăng :: liên kết. Xem thêm bài báo How the Boost Bind Library Can Improve Your C++ Programs (có thể có nhiều bài viết hơn nhưng tôi thấy bài viết này rất hữu ích).

2

Bạn chỉ định trong cuộc gọi đến async_wait tham số nào mà hàm gọi lại của bạn sử dụng, sử dụng trình giữ chỗ. Kiểm tra câu ngay trên cuộc gọi async_wait trên trang bạn đã liên kết với:

Bạn sẽ lưu ý rằng trình giữ chỗ lỗi :: asio :: placeholders :: không được chỉ định ở đây, vì chức năng thành viên in không chấp nhận lỗi đối tượng làm tham số.

Tìm kiếm "trình giữ chỗ" trong this example và bạn sẽ thấy cách thực hiện.

Các vấn đề liên quan