C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Recherche de noms de modeles dependante des arguments

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
drkm
Guest





PostPosted: Thu Jul 01, 2004 6:47 pm    Post subject: Recherche de noms de modeles dependante des arguments Reply with quote



Bonjour

La recherche de noms de modèles n'est pas dépendante des arguments
d'instanciation. Il n'y a pas pour les modèles d'équivalent du Koenig
Lookup. J'ai pensé à cela en lisant un GotW sur les traits. Mettons
que l'on veuille spécialiser std::char_traits pour un type défini par
l'utilisateur :

namespace MonNS {
class MonChar {
// ...
} ;
}

namespace std {
template <>
class char_traits< ::MonNS::MonChar > {
// ...
} ;
}

C'est d'ailleurs, si je ne m'abuse, ce qui a motivé la permission de
modification de std::, pour des spécialisations sur des types définis
par l'utilisateur.

J'aurais pourtant apprécié quelque chose comme :

// En-tête standard.
namespace std {
template < ... >
class string {
// ...
// Utilisation : *pas* de spécification de portée.
char_traits< CharT >::... ;
// ...
} ;
}

// En-tête utilisateur.
namespace MonNS {
class MonChar {
// ...
} ;
template <>
class char_traits< MonChar > {
// ...
} ;
}

Cela me semble coller plus au concept d'interface de classe de
Sutter [*], « ce qui fait référence à et est livré avec la classe »,
en formalisant « est livré avec » par « fait partie du même espace de
noms ».

[*] Je suppose qu'il ne s'agit pas de la définition du seul
Sutter, mais c'est dans Exceptional C++ que je l'ai vu énoncé
pour la première fois.

Ce n'est certes pas aussi vital que le Koenig Lookup, mais j'aurais
trouvé cela agréable. Pensez-vous que cela pourait avoir sa place
dans la norme, ou quelque chose s'y oppose-t-il ?

--drkm
Back to top
Franck Branjonneau
Guest





PostPosted: Thu Jul 01, 2004 8:45 pm    Post subject: Re: Recherche de noms de modeles dependante des arguments Reply with quote



drkm <usenet.fclcxx (AT) fgeorges (DOT) org> écrivait:

Quote:
J'aurais pourtant apprécié quelque chose comme :

// En-tête standard.
namespace std {
template < ...
class string {
// ...
// Utilisation : *pas* de spécification de portée.
char_traits< CharT >::... ;
// ...
} ;
}

// En-tête utilisateur.
namespace MonNS {
class MonChar {
// ...
} ;
template
class char_traits< MonChar > {
// ...
} ;
}

Cela me semble coller plus au concept d'interface de classe de
Sutter [*], « ce qui fait référence à et est livré avec la classe »,
en formalisant « est livré avec » par « fait partie du même espace de
noms ».

Tu as oublié que std::string est une instance de
std::basic_string< _Character, _Traits, _Allocator >.

Donc

namespace MonNS {

class MonChar {
// ...
};

template <>
class MonTrait {
// ...
};

typedef std::basic_string< MonChar, MonTraits > MaString;

}
--
Franck Branjonneau <fasbjx (AT) free (DOT) fr>

Back to top
drkm
Guest





PostPosted: Fri Jul 02, 2004 12:26 pm    Post subject: Re: Recherche de noms de modeles dependante des arguments Reply with quote



Franck Branjonneau <fasbjx (AT) free (DOT) fr> writes:

Quote:
Tu as oublié que std::string est une instance de
std::basic_string< _Character, _Traits, _Allocator >.

L'exemple était en effet mal choisi.

Mais si l'on se place du côté de la conception d'un modèle utilisant
une classe de traits, cela oblige à l'ajouter comme paramètre du
modèle. Même s'il s'agit d'une évolution du modèle et qu'il est déjà
utilisé par ailleurs.

Ce que je veux dire, c'est que lorsque l'on a une utilisation de
modèle comme ceci :

template < typename U >
class C {
// ...
MonTraits< U >::... ;
// ...
} ;

MonTraits doit appartenir à l'espace de noms courant. Si on veut le
spécialiser, il faut le faire dans cet espace de noms. Tandis que
dans :

template < typename U >
class C {
// ...
U u ;
maFonction( u ) ;
// ...
} ;

maFonction peut faire partie soit de l'espace de noms courant, soit de
celui dans lequel est défini le type de son argument (le type effectif
de U lors de l'instanciation).

Je trouve ces deux cas « similaires » (dans la manière dont la
recherche de noms devrait être menée), alors que l'un bénéficie du
Koenig Lookup, et l'autre pas.

Je me demande alors s'il y a des arguments plaidant dans le sens de
cette différence de recherche de nom, ou s'il s'agit juste d'un point
auquel personne n'a pensé.

--drkm

Back to top
Gabriel Dos Reis
Guest





PostPosted: Fri Jul 02, 2004 4:54 pm    Post subject: Re: Recherche de noms de modeles dependante des arguments Reply with quote

drkm <usenet.fclcxx (AT) fgeorges (DOT) org> writes:

[...]

Quote:
// En-tête utilisateur.
namespace MonNS {
class MonChar {
// ...
} ;
template
class char_traits< MonChar > {
// ...
} ;
}

En gros, tu veux une règle qui dit qu'on peut définir les
spécialisations de template n'importe où. Je croyais que les règles
étaient déjà compliquées.

Quote:
Cela me semble coller plus au concept d'interface de classe de
Sutter [*], « ce qui fait référence à et est livré avec la classe »,
en formalisant « est livré avec » par « fait partie du même espace de
noms ».

[*] Je suppose qu'il ne s'agit pas de la définition du seul
Sutter, mais c'est dans Exceptional C++ que je l'ai vu énoncé
pour la première fois.

Ce n'est certes pas aussi vital que le Koenig Lookup, mais j'aurais
trouvé cela agréable. Pensez-vous que cela pourait avoir sa place
dans la norme, ou quelque chose s'y oppose-t-il ?

Source de maux de tête désagréables.

-- Gaby

Back to top
Gabriel Dos Reis
Guest





PostPosted: Fri Jul 02, 2004 4:56 pm    Post subject: Re: Recherche de noms de modeles dependante des arguments Reply with quote

drkm <usenet.fclcxx (AT) fgeorges (DOT) org> writes:

[...]

Quote:
Je me demande alors s'il y a des arguments plaidant dans le sens de
cette différence de recherche de nom, ou s'il s'agit juste d'un point
auquel personne n'a pensé.

La recherche de nom dépendant des arguments, tel que nous la
connaissons aujourd'hui, est le fruit d'un long processus d'évolution
pour régler des problèmes de lookup. Je ne comprends pas très bien le
problème de lookup que tu veux régler ici.

-- Gaby

Back to top
drkm
Guest





PostPosted: Sat Jul 03, 2004 2:11 am    Post subject: Re: Recherche de noms de modeles dependante des arguments Reply with quote

Gabriel Dos Reis wrote in <m3lli2ic2m.fsf (AT) merlin (DOT) cs.tamu.edu>:

Quote:
En gros, tu veux une règle qui dit qu'on peut définir les
spécialisations de template n'importe où. Je croyais que les règles
étaient déjà compliquées.

Tu croyais bien.

[...]

Quote:
Source de maux de tête désagréables.

Argument de poids. Je prend.

--drkm

Back to top
drkm
Guest





PostPosted: Sat Jul 03, 2004 2:18 am    Post subject: Re: Recherche de noms de modeles dependante des arguments Reply with quote

Gabriel Dos Reis wrote in <m3fz8aibzh.fsf (AT) merlin (DOT) cs.tamu.edu>:

Quote:
La recherche de nom dépendant des arguments, tel que nous la
connaissons aujourd'hui, est le fruit d'un long processus d'évolution
pour régler des problèmes de lookup. Je ne comprends pas très bien le
problème de lookup que tu veux régler ici.

Il n'y pas de problème réel. Je trouvais juste qu'il y avait des
similitudes dans les deux cas que j'ai donné, et qu'il aurait été
/agréable/ d'utiliser un pendant du Koenig Lookup pour les modèles.
Mais je ne vois pas de problème insoluble par ailleurs, c'était juste
par curiosité.

--drkm

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.