diese spezielle Containerklasse betrachten, die Typen, die beiden Schlüssel und Wert darin enthalten, soVorlage mit Standardwert von Methodenzeiger Argumente
template<typename K, typename T, K (T::*method)() const>
class Container
{
//...
};
K ist die Art eines Schlüssels speichert, ist T eine Art von Wert und der Methodenzeiger wird verwendet, um den Schlüssel von dem Wert abzurufen.
Es funktioniert gut, aber ich würde einen Standard für die Methode Zeiger enthalten mögen, so dass, wenn es nicht vom Anrufer angegeben wurde es operator K() const
wie so wäre:
template<typename K, typename T, K (T::*method)() const = &T::operator K const>
aber nicht kompiliert dort unter Angabe ist no member operator const K on A (<- my class I test this with)
, wenn ich versuche, es zu instanziieren (und es gibt so eine Methode). Ist es sogar möglich, den Standardwert eines Methodenzeiger-Template-Arguments zu haben? Wenn ja, wie lautet die korrekte Syntax?
EDIT: Neben der Lösung unten gibt es einen „Fix“ für die Fälle, wenn T ein Zeiger ist, die neue C std::remove_pointer<T>::type
++ 11-Funktion verwendet, so:
template<typename K, typename T, K (std::remove_pointer<T>::type::*method)() const = &std::remove_pointer<T>::type::operator K>
Die Idee ist [Sound im Prinzip] (http://ideone.com/fgtF5y). Es kann nur eine Frage der korrekten Schreibweise des Namens der bestimmten Funktion (der Konvertierungsfunktion) sein. –
[There] (http://ideone.com/k1bCEJ), vielleicht entfernen Sie die 'const'? –
'Operator K const' (==' Operator const K') wäre eine Konvertierungsfunktion zu, nun, 'const K'. –