OVH Cloud OVH Cloud

alias de template ?

5 réponses
Avatar
Aurélien REGAT-BARREL
Bonjour,
est-il possible de créer un alias sur une classe template, comme typedef ?
En l'occurrence je voudrais faire quelque chose comme :
typedef boost::shared_ptr SmartPtr;
Il y aurait bien
#define SmartPtr boost::shared_ptr
mais je préfère éviter ce genre de choses.
Merci.

--
Aurélien REGAT-BARREL

5 réponses

Avatar
Marc
"Aurélien REGAT-BARREL" a écrit :

est-il possible de créer un alias sur une classe template, comme typedef ?
En l'occurrence je voudrais faire quelque chose comme :
typedef boost::shared_ptr SmartPtr;
Il y aurait bien
#define SmartPtr boost::shared_ptr
mais je préfère éviter ce genre de choses.


Eh oui, pas de typedef templates :-(

Parfois quelque chose comme ceci fait l'affaire :
template <typename T> struct SmartPtr {
typedef boost::shared_ptr<T> le_type;
};

Mais ça t'oblige à utiliser SmartPtr<T>::le_type ce qui est plus lourd
que SmartPtr<T> tout court.

D'autres fois tu préféreras :
template <typename T> struct SmartPtr: boost::shared_ptr<T> {};

Mais cette dernière solution a un tas de défauts (je n'ai pas regardé le
code de boost::shared_ptr, mais je doute qu'il se prête bien à ceci).

Avatar
Aurélien REGAT-BARREL
Eh oui, pas de typedef templates :-(


:-(

Parfois quelque chose comme ceci fait l'affaire :
template <typename T> struct SmartPtr {
typedef boost::shared_ptr<T> le_type;
};

Mais ça t'oblige à utiliser SmartPtr<T>::le_type ce qui est plus lourd
que SmartPtr<T> tout court.


Ca ne me plait pas trop...

D'autres fois tu préféreras :
template <typename T> struct SmartPtr: boost::shared_ptr<T> {};

Mais cette dernière solution a un tas de défauts (je n'ai pas regardé le
code de boost::shared_ptr, mais je doute qu'il se prête bien à ceci).


Oui, c'est trop risqué. Même si ça marche avec boost, le but est de pouvoir
remplacer par une autre classe sans souci, hors là c'est pas sans soucis.
Bon ben tant pis, pas d'alias alors.
Merci.

--
Aurélien REGAT-BARREL

Avatar
drkm
"Aurélien REGAT-BARREL" writes:

est-il possible de créer un alias sur une classe template, comme
typedef ?


Non. Pas encore. Cfr.
<URL:http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2002/n1406.pdf>.

typedef boost::shared_ptr SmartPtr;


Tu peux faire quelque chose comme (inspiré du document cité) :

template< typename T >
struct SmartPtr
{
typedef boost::shared_ptr< T > Type ;
} ;

SmartPtr< int >::Type my_pointer ;

Il me semble que c'est une fonctionalité qui a souvent été pointée
comme manquante. Je ne vois pas, avec le peu de connaissance que j'ai
sur le sujet, de problème majeur à son implémentation. C'est ce que
semble dire Sutter en fin de document. J'imagine qu'elle a de grande
chance d'être ajoutée au standard.

Quelqu'un a-t-il quelque info plus fiable là-dessus ?

--drkm

Avatar
Twxs
drkm wrote:
"Aurélien REGAT-BARREL" writes:


est-il possible de créer un alias sur une classe template, comme
typedef ?



Non. Pas encore. Cfr.
<URL:http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2002/n1406.pdf>.


typedef boost::shared_ptr SmartPtr;



Tu peux faire quelque chose comme (inspiré du document cité) :

template< typename T >
struct SmartPtr
{
typedef boost::shared_ptr< T > Type ;
} ;

SmartPtr< int >::Type my_pointer ;

Il me semble que c'est une fonctionalité qui a souvent été pointée
comme manquante. Je ne vois pas, avec le peu de connaissance que j'ai
sur le sujet, de problème majeur à son implémentation. C'est ce que
semble dire Sutter en fin de document. J'imagine qu'elle a de grande
chance d'être ajoutée au standard.

Quelqu'un a-t-il quelque info plus fiable là-dessus ?
http://www.research.att.com/~bs/C++0x_keynote.pdf


Twxs

--drkm



Avatar
Gabriel Dos Reis
drkm writes:

[...]

| Il me semble que c'est une fonctionalité qui a souvent été pointée
| comme manquante. Je ne vois pas, avec le peu de connaissance que j'ai
| sur le sujet, de problème majeur à son implémentation. C'est ce que
| semble dire Sutter en fin de document. J'imagine qu'elle a de grande
| chance d'être ajoutée au standard.
|
| Quelqu'un a-t-il quelque info plus fiable là-dessus ?

http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2003/n1449.pdf
http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2003/n1489.pdf

-- Gaby