Có triển khai các lớp chứa cho C++ có hỗ trợ thông báo theo cách tương tự như ObservableCollection cho C# không?container quan sát được cho C++
Trả lời
Không có lớp chuẩn như bạn mô tả, nhưng Boost.Signals là một thư viện thông báo khá mạnh. Tôi sẽ tạo ra một wrapper cho các đối tượng mà đặt ra một tín hiệu khi nó được thay đổi, dọc theo dòng này:
#include <boost/signals.hpp>
#include <vector>
#include <iostream>
// Wrapper to allow notification when an object is modified.
template <typename Type>
class Observable
{
public:
// Instantiate one of these to allow modification.
// The observers will be notified when this is destroyed after the modification.
class Transaction
{
public:
explicit Transaction(Observable& parent) :
object(parent.object), parent(parent) {}
~Transaction() {parent.changed();}
Type& object;
private:
Transaction(const Transaction&); // prevent copying
void operator=(const Transaction&); // prevent assignment
Observable& parent;
};
// Connect an observer to this object.
template <typename Slot>
void Connect(const Slot& slot) {changed.connect(slot);}
// Read-only access to the object.
const Type& Get() const {return object;}
private:
boost::signal<void()> changed;
Type object;
};
// Usage example
void callback() {std::cout << "Changed\n";}
int main()
{
typedef std::vector<int> Vector;
Observable<Vector> o;
o.Connect(callback);
{
Observable<Vector>::Transaction t(o);
t.object.push_back(1);
t.object.push_back(2);
} // callback called here
}
Không có thứ gì trong STL. Điều đó không có nghĩa là ai đó đã không tạo ra một thứ như vậy trong thư viện nguồn mở, nhưng tôi không tin đó là một phần của ngôn ngữ.
Bạn sẽ cần phải viết của riêng bạn và trả lại cho vùng chứa yêu thích của bạn.
Con đường tôi đang làm việc đó tôi có cái gì đó như notify_updated
và wait_event
trong bộ sưu tập của tôi, và tôi gọi notify_updated
sau khi thay đổi được thực hiện, và sau đó trong các phần khác tôi đang chờ đợi cho các sự kiện. Giải pháp của tôi là rất cụ thể cho vấn đề tôi đang giải quyết, vì vậy nó là C-ish. Nghĩ về khái niệm tương tự như mẫu của Mike.
- 1. Có bất kỳ lớp container Qt quan sát nào không?
- 2. Ví dụ siêu đơn giản về quan sát C#/quan sát được với các đại biểu
- 3. Quan sát/Quan sát Android
- 4. động thêm thuộc tính cho đối tượng quan sát được
- 5. Lớp Từ điển Quan sát Chung cho DataBinding/WPF C#
- 6. Mẫu thiết kế quan sát trong C++
- 7. C# 4 quan sát viên thực hiện
- 8. CoffeeScript, Knockout & thể quan sát được
- 9. IoC container cho Objective-C
- 10. Quan sát các thuộc tính của một mảng đang được quan sát trong KnockoutJS
- 11. KnockoutJS - Dải quan sát của các đối tượng quan sát
- 12. .net Quan sát 'Quan sát' một chủ đề nền
- 13. Cách thực hiện Knockout các đối tượng quan sát được bên trong dãy quan sát
- 14. Quan sát KVO và NSNotificationTrung tâm quan sát
- 15. Di NSNotificationCenter quan sát
- 16. Mẫu quan sát đa luồng
- 17. Cách triển khai mẫu quan sát trong C++
- 18. Thay thế cho lớp Quan sát của Java?
- 19. Quan sát tự trong Cocoa
- 20. Mẫu quan sát cho đồng hồ bấm giờ
- 21. Có thể quan sát-invisibleRect
- 22. Số quan sát trong NSMutableArray
- 23. Reactive Quan sát Subscription Xử
- 24. Thay thế cho Mẫu có thể quan sát?
- 25. Số quan sát bởi ngày trong R
- 26. Cập nhật Knockout.js Có thể quan sát được từ JSON
- 27. Mô hình Markov ẩn cho nhiều biến quan sát
- 28. Thêm một chuỗi quan sát được sau khi đăng ký
- 29. Theo dõi số quan sát viên (số lượng) trong một Quan sát?
- 30. Mẫu quan sát bằng ngôn ngữ Go