Bonjour,

Je cherche à définir un objet sous la forme d'un template. Je me heurte actuellement à un petit problème de conception. Je souhaite que ce template puisse prendre en paramètre des types primitifs, mais aussi des pointeurs.
Les pointeurs sur les objets sont alloués à l'extérieur du template puis passés en paramètre. La classe template à la responsabilité de détruire ses objets.

Exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
template<typename T>
class Test
{
    private:
        T data;
        ...
 
    public:
        Test(const T& data){...};
        virtual ~Test(){delete this->data;} // pas cool crash si T est un type primitif.
        ....
};
La solution que j'ai trouvé (pas encore testé mais je suppose qu'elle fonctionne) est de spécialiser le template Test pour les types pointeurs alloués dynamiquements :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
template<typename T>
class Test<T*>
{
    private:
        T* data;
        ...
 
    public:
        Test(T* data){...};
        virtual ~Test(){delete this->data;}
        ....
};
Existe - t - il une méthode plus élégante et plus simple ?
Merci