template<class KeyType, class ValueType, class Hash = std::hash<KeyType> >
class HashMap {
public:
Hash hasher;
HashMap(Hash override_ = hasher) {
hasher = override_;
}
};
Hier ist mein Code. Was ich erwarte, ist, dass ich den Standardwert für hasher
beibehalte, wenn keiner vom Konstruktor geliefert wurde, oder ändere es andernfalls in new. Was ich bekomme ist das: invalid use of non-static data member 'hasher'
. Ich habe bereits gedacht, dass ich hasher
durch Hash()
als Standardwert ersetzen kann; aber was, wenn ich kein Standard Hash
Objekt, aber etwas komplizierter benötigt? Und warum hat mein erster Versuch nicht kompiliert?Warum kann ich den Klassenkonstruktorparameter nicht auf einen Standardwert setzen?
Standard Argumente für den Konstruktor gelöst werden, bevor das Objekt Bau beginnt, so 'hasher' zu diesem Zeitpunkt nicht –
A existieren würde eine gute Lösung wäre 2 Konstruktoren, die andere wäre 'HashMap() {}' –