¿Hay una implementación de clases de contenedor para C++ que admita la notificación de forma similar a ObservableCollection para C#?contenedor observable para C++
Respuesta
No existe una clase estándar como la que describes, pero Boost.Signals es una biblioteca de notificaciones bastante potente. Me gustaría crear un contenedor para objetos que plantea una señal cuando se cambia, a lo largo de las líneas de este:
#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
}
No existe tal cosa en STL. Eso no significa que alguien no haya creado tal cosa en una biblioteca de código abierto, pero no creo que sea parte del lenguaje.
Tendrá que escribir el suyo y volver a colocarlo en su contenedor favorito.
La forma en que lo hago tengo algo así como notify_updated
y wait_event
en mi colección, y me llame notify_updated
después de realizar los cambios, y luego en otras partes estoy esperando los eventos. Mi solución es muy específica para el problema que estoy resolviendo, así que es más C-ish. Pensé que es similar conceptualmente a la muestra de Mike.
- 1. ¿Hay alguna clase de contenedor Qt observable?
- 2. Contenedor C# para objetos
- 3. contenedor COI para Objective-C
- 4. Clase de Diccionario Observable General para DataBinding/WPF C#
- 5. Clase/biblioteca de contenedor para C
- 6. ¿Hay un contenedor .NET/C# para SQLite?
- 7. Contenedor iOS Objective-C para Google Docs
- 8. Eliminación observable de la suscripción observable
- 9. ¿Generar contenedor C desde C++?
- 10. C++ "paso de" contenedor
- 11. Contenedor C++ a C usando SWIG (para FLTK)
- 12. Contenedor C# .net para c dll, específicamente lglcd (g19 sdk)
- 13. Escribir un contenedor C++ para una biblioteca C
- 14. Hacer un contenedor Objective-C para una biblioteca en C++
- 15. Observable Red IO Parsing
- 16. Encuadernación para Singleton Class Observable Collection Miembro
- 17. esperando en un observable
- 18. clase de contenedor C++ inmutable
- 19. KnockoutJS observable Arreglar para actualizar cuando se cambia el observable interno
- 20. Contenedor C++/CLI para C++ nativo para usar como referencia en C#
- 21. ¿Alternativa al patrón observable?
- 22. Actualizando un array observable no actualiza UI
- 23. Cómo copiar colección observable
- 24. Filtrar una colección observable
- 25. Observable en Java
- 26. NSRunningApplication 'terminated' not Observable
- 27. Solo lectura colección observable
- 28. Observable Colección reemplazar elemento
- 29. Observable Stack and Queue
- 30. Qué es un buen contenedor OO C++ para sqlite