- struct CreatorBase
- {
- virtual ~CreatorBase() { }
-
- virtual T *create(Collection &, const std::string &) const = 0;
- };
-
- template<typename C>
- struct Creator: CreatorBase
- {
- typedef T *(C::*FuncPtr)(const std::string &);
-
- FuncPtr func;
-
- Creator(FuncPtr f): func(f) { }
-
- virtual T *create(Collection &coll, const std::string &name) const
- { return (dynamic_cast<C &>(coll).*func)(name); }
- };
-
- struct NotifyeeBase
- {
- virtual ~NotifyeeBase() { }
-
- virtual void notify(Collection &, const std::string &, T &) const = 0;
- };
-
- template<typename C>
- struct Notifyee: NotifyeeBase
- {
- typedef void (C::*FuncPtr)(const std::string &, T &);
-
- FuncPtr func;
-
- Notifyee(FuncPtr f): func(f) { }
-
- virtual void notify(Collection &coll, const std::string &name, T &item) const
- { (dynamic_cast<C &>(coll).*func)(name, item); }
- };
-