[c++][unique_ptr]

Type pointé par le pointeur

Le problème exposé dans ce sujet a été résolu.

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 ^^

+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>.

+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.

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)
      ......
}
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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