Angenommen, ich habe fileA.h
, die eine Klasse classA
mit Template-Funktion SomeFunc<T>()
deklariert. Diese Funktion ist direkt in der Header-Datei implementiert (wie es bei Template-Funktionen üblich ist). Jetzt füge ich eine spezialisierte Implementierung von SomeFunc()
(wie für SomeFunc<int>()
) in fileA.C
hinzu (dh nicht in der Header-Datei).Sichtbarkeit der Template-Spezialisierung der C++ - Funktion
Wenn ich jetzt SomeFunc<int>()
aus einem anderen Code (vielleicht auch aus einer anderen Bibliothek) aufrufen, würde es die generische Version oder die Spezialisierung aufrufen?
Ich habe dieses Problem gerade, wo die Klasse und die Funktion in einer Bibliothek leben, die von zwei Anwendungen verwendet wird. Und eine Anwendung verwendet die Spezialisierung korrekt, während eine andere Anwendung die generische Form verwendet (was später zu Laufzeitproblemen führt). Warum der Unterschied? Könnte das mit Linker-Optionen usw. zusammenhängen? Dies ist unter Linux mit g ++ 4.1.2.
Damnit, die automatische Verknüpfung des Benutzernamens nicht funktioniert. –