[c++][unique_ptr]

Type pointé par le pointeur

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour , j’aurais besoin de savoir le type d’un objet pointé par un smart pointer ( unique_ptr ). J’ai essayé ce code .. croyant que cela fonctionnerais mais en vain. Comment puis-je faire pour savoir le type de mon objet pointé ?

1
2
3
std::unique_ptr<int> t(new int(5));
    if (std::is_same<decltype(*t), int>::value)
        std::cout << "Same type !";

Laissons tombé .. je n’en ai pas besoin finalement mais j’aimerais quand meme savoir s’il est possible de le faire ^^

Édité par Zérotisme

+0 -0

Salut.

Ta méthode ne marche pas car unique_ptr<T>::operator* renvoie une référence de type T&. Ton is_same est donc entre int& et int, donc entre des types différents.

Tu as accès à un alias de type element_type dans unique_ptr, qui correspond à l’argument template. Tu peux donc faire is_same<decltype(t)::element_type, int>.

Mon Github | Pony : Un langage à acteurs sûr et performant

+1 -0

Je serait curieux de savoir quand même ce que tu voulais faire. Avoir besoin de faire une condition sur le type d’un objet pointé, c’est souvent mauvais signe quand c’est durant l’exécution. Mais dans ton cas, c’est assez intriguant vu que c’est une connaissance que tu as au moment de la compilation.

+0 -0
Auteur du sujet

Merci ! En fait c’est une classe template wrapper d’un conteneur et j’avais besoin de connaitre le type de l’objet pour n’accepter que certain type d’objet. Par contre je n’avais pas besoin de tester le type du pointé étant donné que c’est une classe/fonction template et j’avais qu’a tester sur T …

1
2
3
4
5
template<class T>
add(std::unique_ptr<T> & ptr){
   if(std::is_base_of<Base,T>::value)
      ......
}
+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte