alias de template ?

65 views
Skip to first unread message

Aurélien REGAT-BARREL

unread,
Jul 16, 2004, 10:23:57 AM7/16/04
to
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


Marc

unread,
Jul 16, 2004, 10:40:26 AM7/16/04
to
"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).

Aurélien REGAT-BARREL

unread,
Jul 16, 2004, 10:50:32 AM7/16/04
to
> 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


drkm

unread,
Jul 16, 2004, 11:05:55 AM7/16/04
to
"Aurélien REGAT-BARREL" <nospam-...@yahoo.fr.invalid> 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

Twxs

unread,
Jul 16, 2004, 2:41:39 PM7/16/04
to

Gabriel Dos Reis

unread,
Jul 16, 2004, 10:23:48 PM7/16/04
to
drkm <usenet...@fgeorges.org> 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

Reply all
Reply to author
Forward
0 new messages