Có thể tạo các sự kiện tùy chỉnh trong C++ không? Ví dụ, nói rằng tôi có biến X, và biến Y. Bất cứ khi nào X thay đổi, tôi muốn thực hiện một hàm đặt Y bằng 3X. Có cách nào để tạo ra một kích hoạt/sự kiện như vậy? (kích hoạt phổ biến trong một số cơ sở dữ liệu)Sự kiện tùy chỉnh trong C++?
Trả lời
Hãy suy nghĩ bạn nên đọc một chút về Design Patterns, cụ thể là Observer Pattern.
Qt từ Trolltech đã triển khai một giải pháp tốt đẹp mà họ gọi là Signals and Slots.
Theo như tôi biết bạn không thể làm điều đó với biến mặc định, tuy nhiên nếu bạn đã viết một lớp học mà mất một chức năng gọi lại bạn có thể cho phép các lớp khác đăng ký rằng họ muốn được thông báo về bất kỳ thay đổi nào.
Điều này về cơ bản là một ví dụ của mẫu Observer (như những người khác đã đề cập và liên kết). Tuy nhiên, bạn có thể sử dụng mẫu ma thuật để làm cho nó dễ hơn một chút về cú pháp. Hãy xem xét một cái gì đó giống như ...
template <typename T>
class Observable
{
T underlying;
public:
Observable<T>& operator=(const T &rhs) {
underlying = rhs;
fireObservers();
return *this;
}
operator T() { return underlying; }
void addObserver(ObsType obs) { ... }
void fireObservers() { /* Pass every event handler a const & to this instance /* }
};
Sau đó, bạn có thể viết ...
Observable<int> x;
x.registerObserver(...);
x = 5;
int y = x;
phương pháp gì bạn sử dụng để viết các chức năng gọi lại quan sát của bạn là hoàn toàn tùy thuộc vào bạn; Tôi đề nghị chức năng hoặc mô-đun chức năng của http://www.boost.org (bạn cũng có thể sử dụng các trình đơn giản). Tôi cũng cảnh cáo bạn phải cẩn thận về loại điều hành quá tải này. Mặc dù nó có thể làm cho một số kiểu mã hóa rõ ràng hơn, thiếu thận trọng khi sử dụng một cái gì đó như là
seemLikeAnIntToMe = 10;
a rất hoạt động đắt tiền, có thể phát nổ và gây ra những cơn ác mộng trong nhiều năm tới.
Boost signals là một thư viện thường được sử dụng khác mà bạn có thể gặp phải để thực hiện Mẫu quan sát (aka Publish-Subscribe). Người mua hãy cẩn thận ở đây, tôi đã nghe hiệu suất của nó là khủng khiếp.
- 1. Tăng sự kiện tùy chỉnh trong C# WinForms
- 2. Sự kiện Bubbling cho Sự kiện tùy chỉnh trong WPF?
- 3. Sự kiện tùy chỉnh trong HTML, Javascript
- 4. Sự kiện C# với các đối số tùy chỉnh
- 5. Câu hỏi về sự kiện tùy chỉnh
- 6. Sự kiện tùy chỉnh xương sống
- 7. Sự kiện tùy chỉnh bong bóng xuống
- 8. C# Được thiết kế không nhận ra sự kiện tùy chỉnh trong điều khiển người dùng tùy chỉnh
- 9. Sự kiện tùy chỉnh đơn giản trong jquery
- 10. Cách theo dõi sự kiện tùy chỉnh trong paper_trail?
- 11. Sự kiện tùy chỉnh trong Node.js với khung Express
- 12. WPF - Xử lý sự kiện tùy chỉnh gắn trên tùy chỉnh điều khiển
- 13. Qt: Xác định loại sự kiện tùy chỉnh
- 14. Từ khoá 'sự kiện' có tùy chọn trong C# không?
- 15. Câu hỏi sự kiện được định tuyến tùy chỉnh WPF
- 16. FullCalendar: Cách dừng kéo các sự kiện tùy chỉnh?
- 17. Sự kiện tùy chỉnh kích hoạt jQuery đồng bộ?
- 18. Trình xử lý sự kiện tùy chỉnh JavaScript
- 19. Cách kích hoạt sự kiện tùy chỉnh bằng Meteor js
- 20. Firing và chụp tùy chỉnh các sự kiện
- 21. Lỗi kích hoạt sự kiện tùy chỉnh kích hoạt JQuery
- 22. Gửi các sự kiện tùy chỉnh với khung Dojo
- 23. Trình xử lý sự kiện tùy chỉnh Android
- 24. Dịch vụ Sự kiện Thông báo Hệ thống Windows & Sự kiện Tùy chỉnh
- 25. Tắt sự kiện thay đổi kích thước trên sự kiện lịch tùy chỉnh, có thể không?
- 26. Sự kiện trong C++
- 27. sự kiện nhóm trong C#
- 28. C event handler # tùy chỉnh
- 29. Iterator tùy chỉnh trong C++
- 30. Id sự kiện nào để sử dụng cho mục nhập nhật ký sự kiện tùy chỉnh của tôi?
Giải thích tuyệt vời! Tôi đã sử dụng tăng cường trong các dự án trước đây và luôn luôn hài lòng với kết quả. –