#include #include #include #include "foreach.h" //VECTOR2 template class Vector2: public std::vector > { using iterator = typename Vector2::iterator; template friend Class &ForEach(Iterator begin, Iterator end, Class &object, void (Class::*member)(Data &)); public: void process(); private: void rows(std::vector &row); void columns(Type &str); }; template void Vector2::process() { ForEach, std::vector > (this->begin(), this->end(), *this, &Vector2::rows); } template void Vector2::rows(std::vector &row) { ForEach(row.begin(), row.end(), *this, &Vector2::columns); std::cout << '\n'; } template void Vector2::columns(Type &str) { std::cout << str << " "; } using namespace std; int main() { Vector2 c; c.push_back(vector(3, "Hello")); c.push_back(vector(2, "World")); c.process(); } /* Generated output: Hello Hello Hello World World */ //=