Existe-t-il une implémentation de classes de conteneur pour C++ prenant en charge la notification de la même manière que ObservableCollection for C#?conteneur observable pour C++
Répondre
Il n'y a pas de classe standard comme vous l'avez décrit, mais Boost.Signals est une bibliothèque de notification assez puissante. Je voudrais créer un emballage pour des objets qui soulève un signal lorsqu'il est changé, le long des lignes de ce:
#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
}
Il n'y a rien de tel dans STL. Cela ne veut pas dire que quelqu'un n'a pas créé une telle chose dans une bibliothèque open source, mais je ne crois pas que cela fasse partie du langage.
Vous devrez écrire les vôtres et les sauvegarder dans votre conteneur préféré.
La façon dont je le fais, j'ai quelque chose comme notify_updated
et wait_event
dans ma collection, et j'appeler notify_updated
après les modifications sont faites, puis dans d'autres parties, j'attends des événements. Ma solution est très spécifique au problème que je suis en train de résoudre, donc c'est plus C-ish. Pensé que c'est conceptuellement similaire à l'échantillon de Mike.
- 1. Classe de dictionnaire général observable pour DataBinding/WPF C#
- 2. Stl réglable comme conteneur pour C++
- 3. C# Conteneur Question
- 4. C++ conteneur question
- 5. C# fichier conteneur
- 6. Comment rendre BlockingCollection observable?
- 7. LINQ observable, existe?
- 8. Observable List Nhibernate
- 9. Conteneur OLE pour .NET
- 10. NSRunningApplication 'terminée' non observable
- 11. Reliure Observable collection
- 12. C++: conteneur de pointeurs d'origine
- 13. C++ - question conteneur de base
- 14. Désérialise JSON avec JSON.NET en dictionnaire observable [C#]
- 15. Fusion de deux collections Observable
- 16. Collection observable avec l'objet actuel?
- 17. besoin d'aide avec conteneur pour un article générique en C++
- 18. Classe ou conteneur pour stocker des éléments hétérogènes en C++
- 19. Pile observable et file d'attente
- 20. Rendre le dictionnaire PhoneApplicationService.Current.State observable?
- 21. Comment copier la collection observable
- 22. DataGrid Silverlight rafraîchissent collection observable
- 23. Comment faire pour supprimer des éléments d'une collection Observable
- 24. LINQ pour sélectionner x quantité d'objets d'une collection observable
- 25. C++ conteneur STL et la construction
- 26. ID de conteneur C# à incrémentation automatique
- 27. Conteneur WPF UserControl C# VS 2010
- 28. C#; listbox est comme un objet (conteneur)
- 29. Utilisation d'enums avec Pococapsule (conteneur C++ IoC)
- 30. Conteneur pour les boutons d'image