2012-03-08 33 views
11

Tôi đang sử dụng register_callback() để đăng ký chức năng gọi lại cho iostream như được mô tả trong Standard C++ IOStreams and Locales, tr. 202.Hủy đăng ký cuộc gọi lại đã đăng ký qua register_callback()?

Tuy nhiên, không phải tài liệu cũng như bất kỳ tài liệu nào tôi có thể tìm thấy đều biết cách hủy đăng ký cuộc gọi lại. Có thể không? Nếu tôi không sử dụng iword/pword tôi đang sử dụng, bạn có muốn hủy đăng ký ngay cả khi cần thiết không?

+3

+1 để cố gắng sử dụng thứ gì đó mà tôi thậm chí không biết tồn tại. – Nawaz

+2

Dũng cảm. Tất cả các công cụ iostream tiên tiến về cơ bản là lãnh thổ không tích điện. Có một cuốn sách về chủ đề này, nhưng ít người hơn các tác giả đã từng thực sự đào sâu vào những chi tiết gắt gỏng. – jalf

+1

@ jalf: Điều đó có thể là do IOstreams thường hút. :) Chúng có thể mạnh mẽ và thực sự mở rộng, nhưng chúng phức tạp và phức tạp. Đáng buồn thay, dường như không có bất kỳ chuyển động nào liên quan đến phong cách/thư viện I/O mới. – Xeo

Trả lời

8

Hàm register_callback đăng ký gọi lại của bạn cho một đối tượng luồng cụ thể. Cách để thoát khỏi đăng ký là để cho luồng đi ra khỏi phạm vi.

Nếu bạn cần gọi lại để thực hiện công việc của mình chỉ trong một phần thời gian của luồng, bạn có thể lưu trữ điều kiện đó bằng gọi lại và không làm gì cả.

Xóa iword/pword không giúp được gì (ngoại trừ việc nó có thể là tín hiệu cho gọi lại không làm gì cả) và không có cách nào để hủy đăng ký.

+0

Tùy chọn # 1 (luồng ra ngoài phạm vi) không phải là tùy chọn cho luồng như cout. Tùy chọn # 2 (lưu trữ một điều kiện với gọi lại) có vẻ như có vấn đề vì nó chỉ là một hàm bình thường chứ không phải đối tượng functor, do đó thực sự không có nơi nào tốt để lưu trữ thông tin bổ sung. (Cùng một cuộc gọi lại có thể được sử dụng bởi nhiều luồng.) Tùy chọn # 3 (xoá iword/pword) là những gì tôi đang làm bây giờ. Tôi chỉ muốn xem có điều gì tốt hơn không. –

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