Ich versuche, eine Template-Funktion mit Handles zu implementieren, die mit Template-Spezialisierung unterschiedlich voidiert.
Der folgende Code gibt mir eine "Explizite Spezialisierung im Nicht-Namespace-Bereich" in gcc:
%Vor%Ich habe versucht, es aus der Klasse zu entfernen (die Klasse ist nicht templatiert) und in den Namespace, aber dann bekomme ich den Fehler "Explizite Spezialisierung kann keine Speicherklasse haben". Ich habe viele Diskussionen darüber gelesen, aber die Leute scheinen nicht einverstanden zu sein, wie man Funktionsvorlagen spezialisieren kann. Irgendwelche Ideen?
Wenn Sie eine Vorlagenmethode spezialisieren, müssen Sie dies außerhalb der Klassenklammern tun:
%Vor%Wenn Sie es außerhalb der Klasse verwenden, müssen Sie das Schlüsselwort "static" entfernen. Statisches Schlüsselwort außerhalb der Klasse hat eine andere Bedeutung als die, die Sie wahrscheinlich möchten.
%Vor%Es ist nicht direkt eine Antwort auf Ihre Frage, aber Sie können dies schreiben
%Vor%Es sollte funktionieren, selbst wenn _f () 'void' zurückgibt
Edit: In einem allgemeineren Fall, ich denke, wir sollten Funktion Überladung statt Spezialisierung bevorzugen. Hier ist eine gute Erklärung dafür: Ссылка
Sie können die explizite Spezialisierung auf die gleiche Weise deklarieren, wie Sie eine Memberfunktion außerhalb ihrer Klasse definieren würden:
%Vor%Ihr Problem scheint mit boost :: function zu sein - die folgenden Spezialisierungen funktionieren:
%Vor%