Esiste un'implementazione di classi contenitore per C++ che supporta la notifica in modo simile a ObservableCollection per C#?contenitore osservabile per C++
risposta
Non esiste una classe standard come la descrizione, ma Boost.Signals è piuttosto una potente libreria di notifica. Vorrei creare un wrapper per gli oggetti che solleva un segnale quando viene cambiato, lungo le linee di questo:
#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
}
Non c'è niente di simile in STL. Ciò non significa che qualcuno non abbia creato una cosa simile in una libreria open source, ma non credo che faccia parte della lingua.
Sarà necessario scrivere il proprio e appoggiarlo sul contenitore preferito.
Il modo in cui lo sto facendo ho qualcosa di simile notify_updated
e wait_event
nella mia collezione, e mi chiamare notify_updated
dopo aver apportato le modifiche, quindi in altre parti sono in attesa di eventi. La mia soluzione è molto specifica per il problema che sto risolvendo, quindi è più C-ish. Ho pensato che fosse simile concettualmente al campione di Mike.
- 1. contenitore CIO per Objective-C
- 2. Classe dizionario osservabile generale per DataBinding/WPF C#
- 3. C++ "mossa da" contenitore
- 4. Osservabile per una richiamata in Rx
- 5. Contenitore di lista atomica C++
- 6. Contenitore coda più veloce (C++)
- 7. utilizzando contenitore bitset in C++
- 8. Come attendere async Osservabile per il completamento
- 9. C++ - Contenitore efficiente per grandi quantità di dati ricercabili?
- 10. C++ come differenziare tra modello per contenitore e tipo nativo
- 11. CoffeeScript, Knockout e osservabile
- 12. Leggi solo collezione osservabile
- 13. Alternativa al modello osservabile?
- 14. Contenitore S3 per Docker
- 15. Variabile globale Angular2 osservabile
- 16. C# - converte il tipo anonimo in osservabile nella raccolta
- 17. Esempio semplicissimo di osservatore C#/osservabile con i delegati
- 18. Impaginazione osservabile RxJs
- 19. Angular2 @ TypeScript Errore osservabile
- 20. Come copiare raccolta osservabile
- 21. Filtra una raccolta osservabile
- 22. C++ Come creare un contenitore eterogeneo
- 23. Come dichiarare un contenitore autoreferenziale in C++?
- 24. C++ È uno std :: string un contenitore?
- 25. Contenitore C++ più veloce: valori unici
- 26. C++ determinare se un contenitore ha :: find()
- 27. Permettere l'accesso a oggetti contenitore in C++
- 28. Dividere il contenitore in blocchi, C++
- 29. Popolare un contenitore membro statico in C++
- 30. Tipologie di piastre per contenitore compatibile STL