Ein Konzept ist eine Reihe von Anforderungen an einen Typ. Zum Beispiel könnten Sie ein Konzept namens "RandomAccessible" haben, das die Anforderung auf einen Typ setzt, der operator[](int)
in O (1) -Zeit implementiert.
Da Konzepte aus dem kommenden C++ - Standard entfernt wurden, existieren sie nur in C++ als Dokumentation. Als Beispiel könnten Sie SGI's description of the Container concept lesen. Wenn ein Typ alle Anforderungen eines Konzepts erfüllt, nennen Sie ihn Modell dieses Konzepts. Zum Beispiel ist std::vector
ein Modell des Container-Konzepts (oder äquivalent std::vector
"models" Container).
Schließlich ist eine Richtlinie eine Einheit des Verhaltens, die mit anderen Einheiten des Verhaltens kombiniert werden kann, um komplexe Klassen zu erstellen. Angenommen, Sie möchten zwei Klassen erstellen: ein Array fester Größe und ein Array mit dynamisch veränderbarer Größe. Beide Klassen verfügen über viele gemeinsame Funktionen, unterscheiden sich jedoch nur in ihren Speichermechanismen und einigen ihrer Funktionen (z. B. können Sie push_back
nicht in einem Array fester Größe aufrufen).
template <class T, class StoragePolicy>
class array : public StoragePolicy
{
public:
T& operator[](int i) { return data[i]; }
};
template <class T, int N>
class fixed_storage
{
T data[N];
};
template <class T>
class dynamic_storage
{
T* data;
public:
void push_back(const T& value)
{
// Code for dynamic array insertion
}
};
Verwendung wäre wie folgt:
int main()
{
array<int, fixed_storage<int, 10> > fixed_array;
array<int, dynamic_storage<int> > dynamic_array;
dynamic_array.push_back(1);
fixed_array[9] = dynamic_array[0];
}
Offensichtlich ist dies ein sehr grobes und unvollständiges Beispiel ist, aber ich hoffe, dass es das Konzept hinter einer Politik beleuchtet.
Beachten Sie, dass wir in dem Beispiel sagen können, dass fixed_storage
und dynamic_storage
"Modelle" des Konzepts StoragePolicy
sind. Natürlich müssten wir genau definieren, was die Modelle von ihren Modellen verlangen. In diesem Fall wäre es einfach, eine indexierbare data
Elementvariable zu definieren.
(+1) gut geschrieben: D –