J'essaie d'implémenter le modèle d'observateur avec le catch dont j'ai besoin pour ajouter de nouvelles fonctionnalités dans chaque observateur plus tard dans le projet.Boost :: bind avec un espace réservé d'objet
class Obsevers {
public:
virtual ~Obsevers() {}
};
class TestObserver : public Obsevers {
public:
void print1(int i) {
std::cout << i << std::endl;
}
};
class TestObserver2 : public Obsevers {
public:
void print2(int i, char c) {
std::cout << i << " , " << c << std::endl;
}
//possible new functions here later
};
Mon méthode est notifier comme suit:
template<typename Type, typename Notify>
void NotifyObserver(Notify notify) {
typedef std::list<Obsevers*>::iterator iter;
iter it = m_observers.begin();
iter end = m_observers.end();
for(; it != end; ++it) {
Type * o = dynamic_cast<Type*>(*it);
if(o == NULL) continue;
notify(o);
}
}
Pour appeler d'informer le code est le suivant.
NotifyObserver<TestObserver2>(boost::bind(&TestObserver2::print2, _1, 32, 'b'));
Maintenant, étant donné le contexte avec les blocs de code ci-dessus ma question utilise un espace réservé (_1) pour le paramètre objet bind correct ou est pas ce comportement?
La documentation boost sur bind ne spécifiait pas l'utilisation d'un espace réservé pour les objets uniquement pour les paramètres de fonction.
Je vois, je ne connais pas vraiment boost :: mem_fn alors je vais lire comment ça marche. Merci. – andre
Après avoir lu plus dans ce que je comprends. Merci. – andre