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 

Template, argument par defaut et declaration en avant
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Marc Boyer
Guest





PostPosted: Tue Sep 07, 2004 8:53 am    Post subject: Template, argument par defaut et declaration en avant Reply with quote



Bonjour,

bon, je reprends un (gros) code C++, alors je vais avoir je crois pas
mal de questions.

Pour le moment, j'ai un problème de template + argument template par defaut
+ declaration en avant.

Soit une classe avec un argument template par defaut, genre
template <class T,
template
class Collection {
T t;
cont<int> c;
};

J'ai besoin dans une autre classe de faire une déclaration en avant,
mais comme je ne fixe pas dans ce cas de valeur au 2ème argument
template, il faut que je fasse une déclaration en avant complète:
template <class T,
template
class Collection;

Et quand je définis la classe, il rale d'une redéclaration
des arguments par défaut...

J'ai pensé à un fichier du genre
CollectionFwd.h
dans la même veine que
iosfwd
mais est-ce que je sors pas le marteau pour écraser une mouche ?

Est-ce qu'il y a des pratiques "habituelles" ?

Vous faites comment vous ?

Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...
Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Sep 07, 2004 8:57 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote



Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:

Quote:
Vous faites comment vous ?

Il n'y a guere le choix: on ne peut donner les arguments par defaut
qu'une fois.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
Marc Boyer
Guest





PostPosted: Tue Sep 07, 2004 9:00 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote



Jean-Marc Bourguet wrote:
Quote:
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:

Vous faites comment vous ?

Il n'y a guere le choix: on ne peut donner les arguments par defaut
qu'une fois.

Donc, CollectionFwd.h ?

Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...

Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Sep 07, 2004 9:14 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote

Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:

Quote:
Jean-Marc Bourguet wrote:
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:

Vous faites comment vous ?

Il n'y a guere le choix: on ne peut donner les arguments par defaut
qu'une fois.

Donc, CollectionFwd.h ?

Oui. Protege contre la double inclusion, fournissant les arguments
par defaut et inclus dans le fichier avec la definition de la classe
template.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
Marc Boyer
Guest





PostPosted: Tue Sep 07, 2004 9:21 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote

Jean-Marc Bourguet wrote:
Quote:
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:
Donc, CollectionFwd.h ?

Oui. Protege contre la double inclusion, fournissant les arguments
par defaut et inclus dans le fichier avec la definition de la classe
template.

Vivement une gestion des modules en C++.

Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...

Back to top
Jonathan Mcdougall
Guest





PostPosted: Tue Sep 07, 2004 9:25 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote

Quote:
Soit une classe avec un argument template par defaut, genre
template <class T,
template class Collection {
T t;
cont<int> c;
};

Premièrement, ça ne devrait pas compiler puisque std::list prend (au moins)
deux paramètres. Les arguments par défaut de std::list n'entrent pas en
compte ici. Il n'existe pas de moyen standard d'accomplir ceci, puisque les
implémentations sont libres d'ajouter un nombre quelconque paramètress'ils
ont des valeurs par défaut. Comme tu dois les spécifier, une implémentation
utilisant 3 paramètres casserait ton code. En passant, c'est un defect dans
le standard.

Deuxièmement, il te manque un 'class' devant 'cont' :

template <class T, template
class Collection
{
T t;
cont<int, std::allocator c;
};

Normalement, ceci devrait compiler, mais ce n'est pas portable puisque
j'assume que std::list prend deux paramètres. Je répète que les arguments
par défaut ne s'appliquent pas et qu'il faut spécifier manuellement
std::allocator. Tu vois que côté portabilité, ça laisse à désirer.

Quote:
J'ai besoin dans une autre classe de faire une déclaration en avant,
mais comme je ne fixe pas dans ce cas de valeur au 2ème argument
template, il faut que je fasse une déclaration en avant complète:
template <class T,
template class Collection;

Ceci devrait être

template <class T, template
class Collection;

Mais les mêmes remarques s'appliquent. Note filalement que j'ai omis les
noms dans le template de 'cont' : ils sont inutiles ou mêlant au mieux.
Quote:

Et quand je définis la classe, il rale d'une redéclaration
des arguments par défaut...

Oui, au même titre que

void f(int a=2)
{
}

void f(int a=2);

Tu n'as qu'un choix : omettre le paramètre par défaut dans la définition du
template. À partir de là, tu peux simplement copier la déclaration du
template là où tu en as besoin (possiblement dans le même fichier que
l'implémentation) ou simplement l'inclure par un header.


// mon_fwd.h
template <class T, template
class Collection;


// mon_template.h
template <class T, template
class Collection
{
T t;
C<int, std::allocator c;
};


// test1.cpp
# include "mon_fwd.h"

template <class T, template
void f(Collection<T, C> &c)
{
// c.whatever();
}


// test2.cpp
# include "mon_template.h"

template <class T, template
void f(Collection<T, C> &c)
{
c.whatever();
}


Jonathan



Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Sep 07, 2004 9:28 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote

Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:

Quote:
Jean-Marc Bourguet wrote:
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:
Donc, CollectionFwd.h ?

Oui. Protege contre la double inclusion, fournissant les arguments
par defaut et inclus dans le fichier avec la definition de la classe
template.

Vivement une gestion des modules en C++.

Tu as une proposition? C'est un des points ou j'ai chercher a
articuler mes desideratas mais je n'arrive pas a quelque chose qui
vaille la peine d'etre discutte.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
Gabriel Dos Reis
Guest





PostPosted: Tue Sep 07, 2004 9:32 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote

Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:

Quote:
Bonjour,

bon, je reprends un (gros) code C++, alors je vais avoir je crois pas
mal de questions.

Pour le moment, j'ai un problème de template + argument template par defaut
+ declaration en avant.

Soit une classe avec un argument template par defaut, genre
template <class T,
template

Ça ne marchera pas -- excepté si tu comptes sur le gros bug de GCC.
std::list prend deux arguments templates.

Quote:
class Collection {
T t;
cont<int> c;
};

J'ai besoin dans une autre classe de faire une déclaration en avant,
mais comme je ne fixe pas dans ce cas de valeur au 2ème argument
template, il faut que je fasse une déclaration en avant complète:
template <class T,
template class Collection;

Et quand je définis la classe, il rale d'une redéclaration
des arguments par défaut...

Oui. Les arguments par défaut des templates marche à peu près comme
les arguments par défaut des fonctions -- cela définit une valeur.

Quote:

J'ai pensé à un fichier du genre
CollectionFwd.h
dans la même veine que
iosfwd
mais est-ce que je sors pas le marteau pour écraser une mouche ?


Bah pourquoi pas simplement

template<class T, template
struct Collection;

// ...

template<class T, template
struct Collection {
// ...
};


Les paramètres templates de template, c'est un rigide, pourquoi pas
simplement une paramètre type ?

-- Gaby

Back to top
Jonathan Mcdougall
Guest





PostPosted: Tue Sep 07, 2004 9:36 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote

Grrr...

Quote:
// mon_template.h
template <class T, template class Collection
{
T t;
C<int, std::allocator c;
};

Devrait être

// mon_template.h
template <class T, template
class Collection
{
T t;
C<int, std::allocator c;
};


Jonathan



Back to top
Gabriel Dos Reis
Guest





PostPosted: Tue Sep 07, 2004 9:36 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote

"Jonathan Mcdougall" <jonathanmcdougall (AT) DELyahoo (DOT) ca> writes:

Quote:
Soit une classe avec un argument template par defaut, genre
template <class T,
template class Collection {
T t;
cont<int> c;
};

Premièrement, ça ne devrait pas compiler puisque std::list prend (au moins)

std::list prend exactement deux arguments, pas moins, pas plus.

Quote:
deux paramètres. Les arguments par défaut de std::list n'entrent pas en
compte ici. Il n'existe pas de moyen standard d'accomplir ceci, puisque les
implémentations sont libres d'ajouter un nombre quelconque paramètress'ils
ont des valeurs par défaut.

Ce n'est pas permis.

Quote:
Comme tu dois les spécifier, une implémentation
utilisant 3 paramètres casserait ton code. En passant, c'est un defect dans
le standard.

Bah non, il a été clarifié que ce n'est pas permis.


-- Gaby

Back to top
Gabriel Dos Reis
Guest





PostPosted: Tue Sep 07, 2004 9:38 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote

Jean-Marc Bourguet <jm (AT) bourguet (DOT) org> writes:

Quote:
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:

Jean-Marc Bourguet wrote:
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:
Donc, CollectionFwd.h ?

Oui. Protege contre la double inclusion, fournissant les arguments
par defaut et inclus dans le fichier avec la definition de la classe
template.

Vivement une gestion des modules en C++.

Tu as une proposition? C'est un des points ou j'ai chercher a
articuler mes desideratas mais je n'arrive pas a quelque chose qui
vaille la peine d'etre discutte.

C'est loin d'être évident, surtout si on veut une compatibilité avec
l'existant.

-- Gaby

Back to top
Marc Boyer
Guest





PostPosted: Tue Sep 07, 2004 9:42 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote

Jonathan Mcdougall wrote:
Quote:
Soit une classe avec un argument template par defaut, genre
template <class T,
template class Collection {
T t;
cont<int> c;
};

Premièrement, ça ne devrait pas compiler puisque std::list prend (au moins)
deux paramètres.

Mon g++ 3.2.2 l'accepte sans broncher, même en
-ansi -Wall -pedantic

Quote:
Les arguments par défaut de std::list n'entrent pas en
compte ici. Il n'existe pas de moyen standard d'accomplir ceci, puisque les
implémentations sont libres d'ajouter un nombre quelconque paramètress'ils
ont des valeurs par défaut. Comme tu dois les spécifier, une implémentation
utilisant 3 paramètres casserait ton code. En passant, c'est un defect dans
le standard.

Ce que j'aime bien en C++, c'est qu'on arrive vite à mettre le
doigt sans le savoir sur des pb dans la norme.

Quote:
Deuxièmement, il te manque un 'class' devant 'cont' :

Sorry, pb de copier/coller.

Quote:
Tu vois que côté portabilité, ça laisse à désirer.

Je prends note.
Ceci dit, le code est actuellement plein de
_gnu_cxx
donc la portabilité est pas la priorité du moment. Sans
compter que ça utilise un bilbilothèque (nana) qui dit
explicitement avoir besoin de extensions GNU pour compiler,
donc, tant que ça accepte de compiler avec g++, je suis
content.

Quote:
Tu n'as qu'un choix : omettre le paramètre par défaut dans la définition du
template. À partir de là, tu peux simplement copier la déclaration du
template là où tu en as besoin (possiblement dans le même fichier que
l'implémentation) ou simplement l'inclure par un header.

// mon_fwd.h
template <class T, template class Collection;

Je me suis rabattu sur ça en effet.

Merci,
Marc
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...

Back to top
Marc Boyer
Guest





PostPosted: Tue Sep 07, 2004 9:43 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote

Jean-Marc Bourguet wrote:
Quote:
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:

Jean-Marc Bourguet wrote:
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:
Donc, CollectionFwd.h ?

Oui. Protege contre la double inclusion, fournissant les arguments
par defaut et inclus dans le fichier avec la definition de la classe
template.

Vivement une gestion des modules en C++.

Tu as une proposition?

Non... J'ai des problèmes avec la solution actuelle, mais
pas de proposition.

Quote:
C'est un des points ou j'ai chercher a
articuler mes desideratas mais je n'arrive pas a quelque chose qui
vaille la peine d'etre discutte.

Si tu veux lancer une discussion ici, je lirais avec plaisir.

Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...

Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Sep 07, 2004 9:49 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote

Gabriel Dos Reis <gdr (AT) integrable-solutions (DOT) net> writes:

Quote:
Jean-Marc Bourguet <jm (AT) bourguet (DOT) org> writes:

| Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:
|
| > Jean-Marc Bourguet wrote:
| > > Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:
| > >> Donc, CollectionFwd.h ?
|
| > > Oui. Protege contre la double inclusion, fournissant les arguments
| > > par defaut et inclus dans le fichier avec la definition de la classe
| > > template.
|
| > Vivement une gestion des modules en C++.
|
| Tu as une proposition? C'est un des points ou j'ai chercher a
| articuler mes desideratas mais je n'arrive pas a quelque chose qui
| vaille la peine d'etre discutte.

C'est loin d'être évident, surtout si on veut une compatibilité avec
l'existant.

C'etait bien ma conclusion. Mais un esprit neuf pouvait avoir l'idee
lumineuse que je n'ai pas eue a cause de mes prejuges.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
Marc Boyer
Guest





PostPosted: Tue Sep 07, 2004 9:49 am    Post subject: Re: Template, argument par defaut et declaration en avant Reply with quote

Gabriel Dos Reis wrote:
Quote:
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:
| Soit une classe avec un argument template par defaut, genre
| template <class T,
| template
Ça ne marchera pas -- excepté si tu comptes sur le gros bug de GCC.
std::list prend deux arguments templates.

GCC est en effet mon compilateur, et avant que de venir demander
des conseils ici, je me repose sur son expertise à lui (qui est
bien au delà de la mienne).

Quote:
Oui. Les arguments par défaut des templates marche à peu près comme
les arguments par défaut des fonctions -- cela définit une valeur.

|
| J'ai pensé à un fichier du genre
| CollectionFwd.h
| dans la même veine que
| iosfwd
| mais est-ce que je sors pas le marteau pour écraser une mouche ?


Bah pourquoi pas simplement

template<class T, template struct Collection;

// ...

template<class T, template struct Collection {
// ...
};

Pour un problème de maintenance: il y a plusieurs fichiers
qui ont besoin de cette déclaration en avant, et si un jour je
réalise que std::deque est une meilleure solution par
defaut, il vaudrait mieux que je n'ai qu'un seul fichier
à modifier.

Quote:
Les paramètres templates de template, c'est un rigide, pourquoi pas
simplement une paramètre type ?

Heuh, je veux bien essayer si tu m'explique à quoi tu penses.

Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...

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

 
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.