Bonjour,
J'ai une classe templatée MyClass<T> dans un projet dont le compilé est une dll destinée à être liée en statique par un exe. Cette classe utilise des librairies externes. Pour éviter que l'utilisateur de cette dll ait à lier avec ces librairies externes, je fais une instanciation explicite pour les valeurs de T les plus courantes. Donc à la fin du header où se trouve la déclaration de cette classe et dans son namespace, j'ai rajouté :
Ca fonctionne : l'exe peut travailler directement avec MyClass<int> sans avoir à lier avec les fameuses librairies externes. Et dès que je supprime l'instanciation explicite, le compilateur me réclame les librairie à l'édition des liens de l'exe. Donc c'est OK.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 template class MyClass<int>; template class MyClass<char>; ... etc ...
Par contre quand je veux spécialiser une méthode de MyClass<T> pour T = int. Ca ne marche pas. La dll compile sans soucis. Mais malgré l'instanciation explicite de MyClass<int>, le compilateur ne trouve pas les librairies externes lors de l'édition des liens de l'exe.
C'est comme si la spécialisation de cette fonction ne faisait pas partie de l'instanciation explicite. Comme si le compilateur n'avait pas intégrer cette spécialisation lors du build de la dll et donc que ce soit le build de l'exe qui ait à s'en charger.
Il y a un moyen de résoudre ce problème ?
Flo.
Partager