Есть ли реализация классов контейнеров для C++, которые поддерживают уведомление так же, как ObservableCollection для C#?наблюдаемый контейнер для C++
5
A
ответ
5
Нет стандартного класса, который вы описываете, но Boost.Signals - довольно мощная библиотека уведомлений. Я хотел бы создать оболочку для объектов, которые поднимает сигнал при его изменении, вдоль линий этого:
#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
}
0
В STL нет такой вещи. Это не значит, что кто-то не создал такую вещь в библиотеке с открытым исходным кодом, но я не верю, что это часть языка.
-1
Вам нужно будет написать свой собственный и вернуть его в свой любимый контейнер.
0
То, как я это делаю у меня есть что-то вроде notify_updated
и wait_event
в моей коллекции, и я называю notify_updated
после внесения изменений, а затем в других частях я жду событий. Мое решение очень специфично для проблемы, которую я решаю, так что это больше C-ish. Думал, что это похоже на концепцию Майка.
Смежные вопросы
- 1. Контейнер, необходимый для C++
- 2. IoC контейнер для Objective-C
- 3. C# наблюдаемый интервал пропускает тики
- 4. Стандартный контейнер C++ и контейнер STL в C++
- 5. Весенний контейнер, контейнер для тары?
- 6. C++: Контейнер исходных указателей
- 7. Контейнер Разных Типов - C++
- 8. Лучший отсортированный контейнер C++
- 9. Лучший контейнер для объектов класса C++
- 10. Контейнер C++ для высокой производительности FIFO
- 11. C++ для раздвижного окна на контейнер
- 12. Есть ли одновременно контейнер библиотек для C++
- 13. Контейнер C++ для указателей различных типов
- 14. Контейнер C++ STL для базового класса шаблона
- 15. Контейнер для двойника и указатель C++?
- 16. Какой лучший контейнер C++ для использования
- 17. Масштабируемый набор stl как контейнер для C++
- 18. Как использовать контейнер GTK удалить для c
- 19. эквивалент RxJS.pounable (наблюдаемый) для RxJava
- 20. Наблюдаемый .next() для конкретного наблюдателя
- 21. Аналогичный наблюдаемый оператор для Promise.resolve()
- 22. нокаут наблюдаемый для telerik radcaptcha
- 23. Создать наблюдаемый для цикла событий
- 24. C++ контейнер Расщепление
- 25. C++ шаблонный контейнер сканер
- 26. C++ неизменяемый контейнер строки
- 27. C++ - основной контейнер вопрос
- 28. C++ локальный контейнер
- 29. ReactiveX наблюдаемый, который использует другой наблюдаемый
- 30. массив наблюдаемый с содержимым наблюдаемый и jqАвтокомплект