 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
John Deuf Guest
|
Posted: Tue Mar 07, 2006 9:06 am Post subject: template template et arguments par defaut |
|
|
Bonjour,
Est-ce normal que mon compilateur (VC++ 2005) ne prend pas les
arguments par défaut pour les template template ?
template <template<typename, class> class Conteneur = vector> //erreur
Conteneur<int, allocator<int> > ChargeTruc();
De la meme facon, est-ce normal qu'il ne trouve pas l'allocator par
défaut de la classe vector ?
template <template<typename> class Conteneur >
Conteneur<int> ChargeTruc();
main()
{ vector<int> ma_liste = ChargeTruc<vector>();} //erreur
Merci d'avance pour vos éclaircissements. |
|
| Back to top |
|
 |
news.free.fr Guest
|
Posted: Tue Mar 21, 2006 11:06 am Post subject: Re: template template et arguments par defaut |
|
|
bonjour,
| Quote: | Bonjour,
Est-ce normal que mon compilateur (VC++ 2005) ne prend pas les
arguments par défaut pour les template template ?
template <template<typename, class> class Conteneur = vector> //erreur
Conteneur<int, allocator<int> > ChargeTruc();
|
class Conteneur = vector<T> avec T en paramètre de modèle ? (vector n'est
pas un type puisque c'est un template)
| Quote: | De la meme facon, est-ce normal qu'il ne trouve pas l'allocator par
défaut de la classe vector ?
template <template<typename> class Conteneur
Conteneur<int> ChargeTruc();
main()
{ vector<int> ma_liste = ChargeTruc<vector>();} //erreur
|
idem, ChargeTruc<vector<int> >()
>Merci d'avance pour vos éclaircissements. |
|
| Back to top |
|
 |
John Deuf Guest
|
Posted: Tue Mar 21, 2006 7:06 pm Post subject: Re: template template et arguments par defaut |
|
|
news.free.fr :
| Quote: | class Conteneur = vector<T> avec T en paramètre de modèle ? (vector
n'est pas un type puisque c'est un template)
|
Il n'y a pas de type T dans mon template.
Oui, vector est un template c'est pour ca que je le passe comme
template<typename, class>.
On ne peut pas dire au compilo que template<typename, class> = vector par
defaut ?
| Quote: | main()
{ vector<int> ma_liste = ChargeTruc<vector>();} //erreur
idem, ChargeTruc<vector<int> >()
|
Il pourrait le deduire tout seul, non ?
Dans d'autres cas il le fait.
--
John Deuf |
|
| Back to top |
|
 |
kanze Guest
|
Posted: Wed Mar 22, 2006 8:06 am Post subject: Re: template template et arguments par defaut |
|
|
John Deuf wrote:
| Quote: | Est-ce normal que mon compilateur (VC++ 2005) ne prend pas les
arguments par défaut pour les template template ?
template <template<typename, class> class Conteneur = vector> //erreur
Conteneur<int, allocator<int> > ChargeTruc();
|
§14.1/9 : « A default template-argument shall not be specified
in a function template declaration or a function template
definition, nor in the template-parameter-list of the definition
of a member of a class templates. »
Ce que tu veux dire est donc interdit par la norme. (Ne me
démande pas pourquoi. Peut-être parce qu'il pose des problèmes
quand on veut faire de la déduction de type.)
| Quote: | De la meme facon, est-ce normal qu'il ne trouve pas l'allocator par
défaut de la classe vector ?
template <template<typename> class Conteneur
Conteneur<int> ChargeTruc();
main()
{ vector<int> ma_liste = ChargeTruc<vector>();} //erreur
|
Ce n'est pas un problème de trouver l'allocateur par défaut.
C'est un problème de typage -- comme pour les fonctions, la
présence d'un paramètre par défaut ne change pas le type. Tu as
démandé un template avec un seul paramètre. std::vector en a
deux. C'est un cas tout à fait parallel à :
void f( int, int = 0 ) ;
void (*pf)( int ) = &f ; // illégal
Sauf que, évidemment, dans le cas d'une fonction, tu peux très
bien remplacer le paramètre par défaut par un surcharge, pour
que ça marche. Et aussi, pour quelqu'un qui comprend le code
généré, le pourquoi de la règle est assez évident -- quand on se
sert de pf, il faut bien que le compilateur sache combien de
paramètres il y en a réelement, pour en passer le bon nombre.
J'imagine qu'il y a une motivation semblable derrière la
restriction sur les templates, mais j'avoue ne pas assez
comprendre sur comment ils marchent pour pouvoir la voir.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
| Back to top |
|
 |
|
|
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
|
|