Tôi đã cố gắng triển khai hệ thống sự kiện C# giống như trong C++ với các mẫu chức năng tr1 được sử dụng để lưu trữ một hàm xử lý sự kiện.So sánh tiêu chuẩn :: tr1 :: function <> objects
Tôi tạo ra một vector để nhiều người nghe có thể được gắn liền với sự kiện này, tức là .:
vector< function<void (int)> > listenerList;
Tôi muốn để có thể loại bỏ một handler từ danh sách để ngăn chặn một người biết lắng nghe nhận sự kiện.
Vì vậy, làm cách nào tôi có thể tìm thấy mục nhập trong danh sách này tương ứng với một người nghe nhất định? Tôi có thể kiểm tra nếu một đối tượng 'chức năng' trong danh sách đề cập đến một chức năng cụ thể không?
Cảm ơn!
EDIT: Đã xem xét phương pháp tăng cường :: tín hiệu, có vẻ như nó có thể được triển khai bằng cách sử dụng hệ thống mã thông báo như một số bạn đã đề xuất. Here's some info on this. Người quan sát giữ lại đối tượng "Kết nối" khi họ đính kèm vào một sự kiện và đối tượng kết nối này được sử dụng để ngắt kết nối nếu cần. Vì vậy, có vẻ như cho dù bạn sử dụng Boost hoặc cuộn của riêng bạn với tr1, nguyên tắc cơ bản là như nhau. tức là nó sẽ hơi vụng về :)
Nếu bạn định sử dụng cấu trúc có thông tin bổ sung, bạn cũng có thể lưu trữ functors dưới dạng giá trị băm và GUID/bất cứ điều gì dưới dạng khóa băm. :-) –
Bạn không thể lưu trữ functors dưới dạng giá trị băm. Bạn không thể làm bất cứ điều gì với họ. Bao bọc chúng trong một cấu trúc (thậm chí là một cấu trúc một phần tử của chỉ là functor) sẽ cho phép bạn làm bất cứ điều gì với chúng. Đó là cố ý mà họ không thể được so sánh/băm/etc mà không có một số công việc. – hazzen