I read Concept Based Inheritance in C ++. I have an attached sample code for everyone. I basically ask if this concept is correct? I am new to this, so I just put off what is on my mind. Any comments / criticisms are welcome.
#include "stdafx.h" #include <memory> #include <vector> #include <algorithm> #include <iostream> using namespace std; struct Point{ int x; int y; }; class graphics_surface{ class drawable_concept{ public: virtual void draw(Point const& coordinate) {}; virtual ~drawable_concept() {}; }; template<class T> class drawable_model : public drawable_concept{ public: drawable_model(T& item) : item_(item){} void draw(Point const& coordinate){ item_.draw(coordinate); } ~drawable_model(){} private: T item_; }; public: template<class T> void push_back(T& drawable){ v_.push_back(shared_ptr<drawable_concept>( new drawable_model<T>(drawable))); } void draw(Point const& coordinate) { for_each(v_.begin(), v_.end(), [&](shared_ptr<drawable_concept>& concept){ concept->draw(coordinate); }); } private: vector<shared_ptr<drawable_concept>> v_; }; struct triangle{ void draw(Point const& p){ cout << "Triangle: " << px << "," << py << endl; } }; struct square{ void draw(Point const& p){ cout << "Sqaure: " << px << "," << py << endl; } }; int _tmain(int argc, _TCHAR* argv[]) { Point p; px = 1; py = 2; graphics_surface surface; surface.push_back(triangle()); surface.draw(p); return 0; }
Thanks in advance.
Blair
c ++ polymorphism duck-typing
Blair davidson
source share