Template-Spezialisierung für statische Member-Funktionen; wie man?

8

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?

    
Rolle 20.04.2009, 09:00
quelle

5 Antworten

13

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%     
David Rodríguez - dribeas 20.04.2009, 09:56
quelle
4

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: Ссылка

    
Rexxar 20.04.2009 09:42
quelle
3

Sie können die explizite Spezialisierung auf die gleiche Weise deklarieren, wie Sie eine Memberfunktion außerhalb ihrer Klasse definieren würden:

%Vor%     
Richard Corden 20.04.2009 09:13
quelle
2

Ihr Problem scheint mit boost :: function zu sein - die folgenden Spezialisierungen funktionieren:

%Vor%     
anon 20.04.2009 09:25
quelle
1

Ich hatte ein ähnliches Problem. Wenn Sie sich den ursprünglichen Beitrag ansehen, habe ich den ersten statischen Eintrag gelassen, aber den zweiten entfernt und BEIDE Fehler sind verschwunden.

    
Bob Belt 30.11.2010 19:15
quelle

Tags und Links