Toujours en considérant que l'en-tête suivant, contenant mon basé sur un modèle de la classe, est inclus dans au moins deux .CPP
fichiers, ce code compile correctement:
template <class T>
class TClass
{
public:
void doSomething(std::vector<T> * v);
};
template <class T>
void TClass<T>::doSomething(std::vector<T> * v) {
// Do somtehing with a vector of a generic T
}
template <>
inline void TClass<int>::doSomething(std::vector<int> * v) {
// Do somtehing with a vector of int's
}
Mais notez la ligne dans la spécialisation de la méthode. Il est nécessaire pour que le code ne pas avoir de liens d'erreur (dans VS2008 est LNK2005) en raison de la méthode définie plus d'une fois. Je comprends cela, car autant que je sache, un modèle complet de spécialisation est la même qu'une simple définition de la méthode.
Alors, comment puis-je supprimer qu' inline
? Le code ne doit pas être dupliqué dans chaque utilisation. J'ai cherché sur Google, de lire quelques questions ici, dans la et essayé beaucoup de solutions proposées, mais aucune n'a été construit avec succès (au moins pas dans VS 2008).
Merci!