Speichern von C ++ - Vorlagenfunktionsdefinitionen in einer CPP-Datei
Ich habe einen Vorlagencode, den ich lieber in einer CPP-Datei als in der Kopfzeile gespeichert haben möchte. Ich weiß, dass dies getan werden kann, solange Sie wissen, welche Vorlagentypen verwendet werden. Zum Beispiel:
.h Datei
class foo
{
public:
template <typename T>
void do(const T& t);
};
CPP-Datei
template <typename T>
void foo::do(const T& t)
{
// Do something with t
}
template void foo::do<int>(const int&);
template void foo::do<std::string>(const std::string&);
Beachten Sie die letzten beiden Zeilen - die Funktion foo :: do template wird nur mit ints und std :: strings verwendet. Diese Definitionen bedeuten also, dass die App eine Verknüpfung erstellt.
Meine Frage ist - ist das ein böser Hack oder funktioniert das mit anderen Compilern / Linkern? Ich verwende diesen Code derzeit nur mit VS2008, möchte ihn aber auf andere Umgebungen portieren.