Dans Class.h
:
class Class {
public:
template <typename T> void function(T value);
};
Dans Class.cpp
:
template<typename T> void Class::function(T value) {
// do sth
}
Dans main.cpp
:
#include "Class.h"
int main(int argc, char ** argv) {
Class a;
a.function(1);
return 0;
}
J'obtiens une erreur liée car Class.cpp
N'instancie jamais void Class::function<int>(T)
. Vous pouvez instancier explicitement une classe de modèle avec:
template class std::vector<int>;
Comment instancier explicitement un membre modèle d'une classe non modèle?
Merci,
Vous pouvez utiliser la syntaxe suivante dans Class.cpp
:
template void Class::function(int);
L'argument modèle peut être omis en raison de la déduction de type, qui fonctionne pour les modèles de fonction. Ainsi, ce qui précède est équivalent à ce qui suit, juste plus concis:
template void Class::function<int>(int);
Notez qu'il n'est pas nécessaire de spécifier les noms des paramètres de fonction - ils ne font pas partie de la signature d'une fonction (ou d'un modèle de fonction).
Avez-vous essayé ce qui suit dans Class.cpp
?
template void Class::function<int>(int value);