A partir de la réponse de STH à cette question:multiples erreur de définition C de
Je me demandais comment résoudre les multiples erreurs de définition si le code suivant est placé dans un fichier d'en-tête inclus plusieurs fois par différents fichiers .cc et liés entre eux:
template <typename T>
class C {
static const int K;
static ostream& print(ostream& os, const T& t) { return os << t;}
};
// general case
template <typename T>
const int C<T>::K = 1;
// specialization
template <>
const int C<int>::K = 2;
Comment cela fonctionnerait-il? Et si j'avais besoin des spécialisations dans plusieurs fichiers .cc? Ensuite, je reçois une erreur lorsque je lier plusieurs fichiers .cc avec les mêmes définitions. – user231536
@ user231536: Si vous écrivez une définition classe normale vous fournir des méthodes que dans un seul .cc, éditeur de liens permet de les utiliser du reste des fichiers .cc. La même chose pour les spécialisations complètes. Vous fournissez la spécialisation seulement dans un dossier de .cc, l'éditeur de liens s'assure que d'autres dossiers de .cc peuvent l'employer. – Paul