我一直在阅读C中基于概念的继承.我为所有人附上了一个代码示例.我基本上问这是否正确实现了这个概念?我是新手,所以我只是放下我的想法.欢迎任何评论/批评.
#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: " << p.x << "," << p.y << endl; } }; struct square{ void draw(Point const& p){ cout << "Sqaure: " << p.x << "," << p.y << endl; } }; int _tmain(int argc,_TCHAR* argv[]) { Point p; p.x = 1; p.y = 2; graphics_surface surface; surface.push_back(triangle()); surface.draw(p); return 0; }
提前致谢.
布莱尔