我一直在閱讀基於概念的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;
}
在此先感謝。
布萊爾
我沒有在那裏看到什麼概念。這只是普通的基於類的多態(不管這個名稱是什麼)。 (編輯:哦,現在我看到它是如何工作的......這個評論可能完全錯誤) – immibis
注意:C++程序員通過C++ 0x建議強烈關聯「Concepts」,用於檢查作爲支持的模板參數傳遞的類型語義;這個問題是關於「基於概念的多態性」,它是使用編譯時多態來創建運行時多態對象的獨特習慣。 –
是的這就是我正在談論的Tony D. Keen的評論。 –