modèle de fichier source de la Croix-instanciation et de l'utilisation
-
26-09-2019 - |
Question
J'ai une classe avec plusieurs fonctions membres de modèle que je voudrais répartir entre plusieurs fichiers source pour accélérer les temps de compilation. (Les modèles sont des détails de mise en œuvre et ne sont pas destinés à être utilisés en dehors de la classe, d'où leur définition dans les sources non-têtes).
Comment pourrais-je aller sur le fractionnement des modèles de telle sorte que je ne vais pas les erreurs de l'éditeur de liens? Si je fichier source A l'aide d'un modèle défini dans le fichier source de B, comment puis-je assurer que l'instance appropriée du modèle est construit par le compilateur?
La solution
Je ne pouvais pas répondre à mieux que la FAQ C de:
https://isocpp.org/wiki/faq/templates#templates- defn-vs-décl
Autres conseils
Il suffit de ne pas déclarer ces éléments de modèle dans le cadre de la classe dans le fichier d'en-tête. Ensuite, définir uniquement vos modèles dans le fichier source. Par exemple:
MyClass.hpp
class MyClass
{
public:
void SomePublicMethod() const;
};
MyClass.cpp
template<class T>
void SomethingWithT(T myVal)
{
// ...
}
void MyClass::SomePublicMethod() const
{
SomethingWithT(42);
}