Ich mag wie so zwei einfache abstrakte Klassen implementieren:Implementierung der abstrakten Klasse ohne Template-Argument
class Hashable {
public:
virtual Int hashValue() = 0;
};
template <typename T>
class Equatable {
virtual Bool operator == (const T& other) = 0;
}
Diese Klassen mir die Möglichkeit von Teil Template-Spezialisierung in meiner neuen Wörterbuch-Klasse geben werden.
Allerdings konnte ich sie nicht zur Arbeit bringen. Hier ist die Erklärung meines Wörterbuch Klasse:
template <Hashable Key, typename Value>
class Dictionary {
.
.
.
};
Das Problem ist, Schlüssel auch Equatable
sein sollte, weil hashability sollte es erfordern.
Also, ich habe zwei Fragen:
Können wir
Equatable<T>
Klasse umschreiben keine Vorlage Argumente haben? Hat C++ ein Schlüsselwort, das sich auf den aktuellen Typ der Klasse bezieht?Meiner Meinung nach
Hashable
besser erben vonEquatable
Klasse. Wie erreiche ich das ohne neue Template Definition aufHashable
(wenn meine erste Frage ja beantwortet wird, ist diese dann schon gelöst)?Was wäre der beste objektorientierte Ansatz hier? Eine Interface-Klasse mit Template-Argumenten zu haben, erscheint uns nicht gut.
Vielen Dank.
empfehle ich glaube, du bist eigentlich für typeclass Mechanismus suchen, die nicht wirklich gut verfügbar in C++. Es gibt einen Mechanismus von Konzepten, der seit C++ 11 geplant war, aber es hat nicht einmal C++ 17 (http://honermann.net/blog/?p=3) –