Bonjour tout le monde,
Je cherche une méthode afin d'exporter une version compilée de mes templates au sein d'une bibliothèque sans pour autant fournir le fichier du template.
Est-ce faisable?
Merci
Bonjour tout le monde,
Je cherche une méthode afin d'exporter une version compilée de mes templates au sein d'une bibliothèque sans pour autant fournir le fichier du template.
Est-ce faisable?
Merci
Une version compilée de templates c++ ? Ça ne fait pas sens pour moi vu que les templates sont utilisés à la compilation
Ou ai-je mal compris la question ?
Oui, je me suis mal exprimé. En fait, j'ai un template représentant des images. Ces images peuvent être soient de type float soit de type entier par exemple. Je voulais éviter de donner l'implémentation de cette classe template en ne donnant juste leur "spécialisation" (en utilisant typedef par exemple).
Oui si comme j'ai compris, c'est le type de données qui est templatisé, tu dois pouvoir faire un typedef dans un header.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template<typename T> class mine { public: mine(T v):d(v){} private: T d; }; typedef mine<int> mineint; typedef mine<float> minefloat;
Tu peux passer par une astuce: la spécialisation de type incomplet:
La classe template n'est pas définie dans le cas général, et est spécialisée pour deux cas précis
L'en-tête contiendrait:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template <typename T> class Bidule; //surtout pas d'accolades template <> class Bidule<int> { // ce que tu veux }; template <typename T> class Bidule<float> { // ce que tu veux };
Merci pour vos réponses.
@SkyZoThreaD: le problème avec cette méthode, c'est que j'exporte le template ce que je souhaite.
@leternel: je ne souhaite pas vraiment spécialiser les templates, mais plutôt les définir.
Mon but est d'éviter d'inclure certains en-tête entraînant des dépendances indésirables.
Voici un exemple:
Je ne vois vraiment pas si c'est possible mais bon, peut-être qu'il existe une petite astuce sympa pour ce genre de problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 // Dans Image.hxx qui ne serait pas exporté #include <header_indesirable.hpp> template<typename T> class Image { public: Image(){} void method(); // Méthode qui utilise header_indesirable.hpp private: T m_data; }; template<typename T> void method() { // du code } // Dans ImageImpl.hpp qui serait exporté typedef Image<int> ImageInt; typedef Image<float> ImageFloat;
Partager