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.

Antworten auf die Frage(11)

Ihre Antwort auf die Frage