// MT2Q5 - collection of smart pointers #include #include #include #include "../Utilities/Utilities.h" class Verbal { public: Verbal(); void say(); private: static size_t numberOfInstances_; size_t myNumber_; }; size_t Verbal::numberOfInstances_ = 0; Verbal::Verbal() : myNumber_(++numberOfInstances_) {} void Verbal::say() { std::cout << "\n Verbal instance #" << myNumber_; } template class Collection { public: using iterator = typename std::vector>::iterator; iterator begin() { return collection_.begin(); } iterator end() { return collection_.end(); } void add(T* t); private: std::vector> collection_; }; template void Collection::add(T* t) { collection_.push_back(std::unique_ptr(t)); } template void Operation(Collection& c, CallObj& co) { for (auto& pElem : c) { co(*pElem); } } void main() { title("MT2Q5 - Callable Object"); Collection c; c.add(new Verbal()); c.add(new Verbal()); c.add(new Verbal()); Operation(c, [](Verbal& v) { v.say(); }); std::cout << "\n\n"; }