Ich habe auf Concept-basierte Vererbung in C++ gelesen. Ich habe ein Codebeispiel für alle beigefügt. Ich frage im Grunde, ob dies eine korrekte Umsetzung des Konzepts ist? Ich bin neu in diesem Bereich, also lege ich nur nieder, was ich denke. Kommentare/Kritik sind willkommen.Konzeptbasierter Polymorphismus
#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;
}
Vielen Dank im Voraus.
Blair
Ich sehe nichts über Konzepte in nicht da. Es ist nur normale klassenbasierte Polymorphie (was auch immer der richtige Name dafür ist). (edit: oh, jetzt sehe ich, wie das funktioniert ... dieser Kommentar könnte komplett falsch sein) – immibis
Hinweis: "Konzepte" ist stark von C++ - Programmierern mit dem C++ 0x-Vorschlag für die Überprüfung, dass Typen als Template-Parameter übergeben unterstützt spezifisch zugeordnet Semantik; Diese Frage bezieht sich auf "Konzeptbasierter Polymorphismus", der ein unterschiedliches Idiom für die Verwendung von Kompilierungszeitpolymorphismus zum Erstellen eines polymorphen Laufzeitobjekts darstellt. –
Ja, darüber spreche ich über Tony D. Keen für Kommentare. –