// MT4Q1 #include #include #include template class Invoker { public: void Register(T* pObj) { items.push_back(pObj); // save pointer to user's object } void Invoke(const T& obj) { std::vector::const_iterator iter; for(iter=items.begin(); iter!=items.end(); ++iter) *(*iter) = obj; // assign to user object } private: std::vector items; // pointers to user objects }; template class GetInvoker { public: Invoker& get() { return inv_; } private: static Invoker inv_; // static so access in any scope }; template Invoker GetInvoker::inv_; template class scopeOne { public: scopeOne() { GetInvoker().get().Register(&obj_); } void show() { std::cout << "\n my object value is: " << obj_; } private: T obj_; }; template class scopeTwo { public: scopeTwo() { GetInvoker().get().Register(&obj_); } void show() { std::cout << "\n my object value is: " << obj_; } private: T obj_; }; void main() { scopeOne so; scopeTwo st; GetInvoker().get().Invoke(13); so.show(); st.show(); GetInvoker().get().Invoke(53); so.show(); st.show(); std::cout << "\n\n"; }