je me remets au C++ après une bonne année de pause, et j'ai du mal
avec un code qui fonctionnait.
Ci joint un exemple minimal:
#include <list>
template <typename T>
class X {
T t;
};
class Toto {
public:
typedef X<int> X;
typedef std::list<int> list;
};
Et mon g++ se plaint:
toto.cpp:10: error: declaration of ‘typedef class X<int> Toto::X’
toto.cpp:4: error: changes meaning of ‘X’ from ‘class X<int>’
J'imagine bien que g++ a raison. En même temps, je trouvais pratique
de pouvoir écrire
Toto::X
comme raccourci de
X<int>
(bon, là c'est pas très parlant, mais quand il y a plein de paramètres
templates, je trouvais ça plus pratique, surtout s'ils changent un jour).
Auriez-vous une idée ?
Merci,
Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot=130
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc Bourguet
Marc Boyer writes:
Auriez-vous une idée ?
Je suis loin d'etre sur que ce soit une bonne idee, mais
typedef ::X<int> X;
devrait passer.
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
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> writes:
Auriez-vous une idée ?
Je suis loin d'etre sur que ce soit une bonne idee, mais
typedef ::X<int> X;
devrait passer.
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
Je suis loin d'etre sur que ce soit une bonne idee, mais
typedef ::X<int> X;
devrait passer.
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
Fabien LE LEZ
On Tue, 1 Dec 2009 11:29:47 +0000 (UTC), Marc Boyer :
#include <list>
template <typename T> class X { T t; };
class Toto { public: typedef X<int> X; typedef std::list<int> list; };
J'ai mis ce texte (et rien d'autre) dans marc.cpp.
Ensuite, je tape g++ -c -pedantic -Wall marc.cpp && echo ok
On Tue, 1 Dec 2009 11:29:47 +0000 (UTC), Marc Boyer :
J'ai mis ce texte (et rien d'autre) dans marc.cpp.
Ensuite, je tape g++ -c -pedantic -Wall marc.cpp && echo ok
et tout marche bien, aucune erreur, juste "ok".
Voui, c'est ce que j'avais il y a environ un an.
Pour info :
$ g++ -v gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
Je suis en 4.4.1. Ca doit faire la différence.
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
Le 01-12-2009, Fabien LE LEZ <gramster@gramster.com> a écrit :
On Tue, 1 Dec 2009 11:29:47 +0000 (UTC), Marc Boyer
<Marc.Boyer@cert.onera.fr.invalid>:
J'ai mis ce texte (et rien d'autre) dans marc.cpp.
Ensuite, je tape
g++ -c -pedantic -Wall marc.cpp && echo ok
et tout marche bien, aucune erreur, juste "ok".
Voui, c'est ce que j'avais il y a environ un an.
Pour info :
$ g++ -v
gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
Je suis en 4.4.1. Ca doit faire la différence.
Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
On Tue, 1 Dec 2009 11:29:47 +0000 (UTC), Marc Boyer :
J'ai mis ce texte (et rien d'autre) dans marc.cpp.
Ensuite, je tape g++ -c -pedantic -Wall marc.cpp && echo ok
et tout marche bien, aucune erreur, juste "ok".
Voui, c'est ce que j'avais il y a environ un an.
Pour info :
$ g++ -v gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
Je suis en 4.4.1. Ca doit faire la différence.
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
Marc Boyer
Le 01-12-2009, Jean-Marc Bourguet a écrit :
Marc Boyer writes:
Auriez-vous une idée ?
Je suis loin d'etre sur que ce soit une bonne idee, mais
typedef ::X<int> X;
devrait passer.
En effet, ça passe. Est-ce une bonne idée ? Je sais pas. Comment font les gens ? Il se trainent dans leur code des choses du genre
conteneur_metier< std::string , objet_metier< true > >::const_iterator it = toto.begin() ou Titi::const_iterator it = toto.begin()
(en attendant d'avoir auto it = toto.begin() )
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
Le 01-12-2009, Jean-Marc Bourguet <jm@bourguet.org> a écrit :
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> writes:
Auriez-vous une idée ?
Je suis loin d'etre sur que ce soit une bonne idee, mais
typedef ::X<int> X;
devrait passer.
En effet, ça passe.
Est-ce une bonne idée ? Je sais pas. Comment font les gens ?
Il se trainent dans leur code des choses du genre
conteneur_metier< std::string ,
objet_metier< true > >::const_iterator it = toto.begin()
ou
Titi::const_iterator it = toto.begin()
(en attendant d'avoir
auto it = toto.begin() )
Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Je suis loin d'etre sur que ce soit une bonne idee, mais
typedef ::X<int> X;
devrait passer.
En effet, ça passe. Est-ce une bonne idée ? Je sais pas. Comment font les gens ? Il se trainent dans leur code des choses du genre
conteneur_metier< std::string , objet_metier< true > >::const_iterator it = toto.begin() ou Titi::const_iterator it = toto.begin()
(en attendant d'avoir auto it = toto.begin() )
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
Jean-Marc Bourguet
Marc Boyer writes:
Le 01-12-2009, Jean-Marc Bourguet a écrit : > Marc Boyer writes: > >> Auriez-vous une idée ? > > Je suis loin d'etre sur que ce soit une bonne idee, mais > > typedef ::X<int> X; > > devrait passer.
En effet, ça passe. Est-ce une bonne idée ? Je sais pas. Comment font les gens ? Il se trainent dans leur code des choses du genre
conteneur_metier< std::string , objet_metier< true > >::const_iterator it = toto.begin() ou Titi::const_iterator it = toto.begin()
(en attendant d'avoir auto it = toto.begin() )
J'evite la surcharge, j'ai des typesdefs mais pas avec en remplacant un template par qqch du meme nom. (Et je ne sais pas quelle version de gcc a raison; meme si je pense que ce doit etre la plus recente, je n'ai pas trouve une reference qui le confirme).
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
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> writes:
Le 01-12-2009, Jean-Marc Bourguet <jm@bourguet.org> a écrit :
> Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> writes:
>
>> Auriez-vous une idée ?
>
> Je suis loin d'etre sur que ce soit une bonne idee, mais
>
> typedef ::X<int> X;
>
> devrait passer.
En effet, ça passe.
Est-ce une bonne idée ? Je sais pas. Comment font les gens ?
Il se trainent dans leur code des choses du genre
conteneur_metier< std::string ,
objet_metier< true > >::const_iterator it = toto.begin()
ou
Titi::const_iterator it = toto.begin()
(en attendant d'avoir
auto it = toto.begin() )
J'evite la surcharge, j'ai des typesdefs mais pas avec en remplacant un
template par qqch du meme nom. (Et je ne sais pas quelle version de gcc a
raison; meme si je pense que ce doit etre la plus recente, je n'ai pas
trouve une reference qui le confirme).
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
Le 01-12-2009, Jean-Marc Bourguet a écrit : > Marc Boyer writes: > >> Auriez-vous une idée ? > > Je suis loin d'etre sur que ce soit une bonne idee, mais > > typedef ::X<int> X; > > devrait passer.
En effet, ça passe. Est-ce une bonne idée ? Je sais pas. Comment font les gens ? Il se trainent dans leur code des choses du genre
conteneur_metier< std::string , objet_metier< true > >::const_iterator it = toto.begin() ou Titi::const_iterator it = toto.begin()
(en attendant d'avoir auto it = toto.begin() )
J'evite la surcharge, j'ai des typesdefs mais pas avec en remplacant un template par qqch du meme nom. (Et je ne sais pas quelle version de gcc a raison; meme si je pense que ce doit etre la plus recente, je n'ai pas trouve une reference qui le confirme).
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
James Kanze
On Dec 1, 1:40 pm, Marc Boyer wrote:
Le 01-12-2009, Jean-Marc Bourguet a écrit :
> Marc Boyer writes:
>> Auriez-vous une idée ?
> Je suis loin d'etre sur que ce soit une bonne idee, mais
> typedef ::X<int> X;
> devrait passer.
En effet, ça passe. Est-ce une bonne idée ? Je sais pas. Comment font les gens ? Il se trainent dans leur code des choses du genre
conteneur_metier< std::string , objet_metier< true > >::const_iterator it = toto.begi n() ou Titi::const_iterator it = toto.begin()
(en attendant d'avoir auto it = toto.begin() )
Chez moi, souvent, il y a des choses comme:
class C { typedef std::map<...> Map; typedef Map::const_iterator Iterator; // ... };
, avec des "typename" où il faut si C est un template. Convertit les majuscules en minuscules, et ça doit marcher aussi. (La clé, peut-être, c'est l'utilisation de std::. En somme, à peu près la solution proposée par Jean-Marc.
-- James Kanze
On Dec 1, 1:40 pm, Marc Boyer <Marc.Bo...@cert.onera.fr.invalid>
wrote:
Le 01-12-2009, Jean-Marc Bourguet <j...@bourguet.org> a écrit :
> Marc Boyer <Marc.Bo...@cert.onera.fr.invalid> writes:
>> Auriez-vous une idée ?
> Je suis loin d'etre sur que ce soit une bonne idee, mais
> typedef ::X<int> X;
> devrait passer.
En effet, ça passe.
Est-ce une bonne idée ? Je sais pas. Comment font les gens ?
Il se trainent dans leur code des choses du genre
conteneur_metier< std::string ,
objet_metier< true > >::const_iterator it = toto.begi n()
ou
Titi::const_iterator it = toto.begin()
(en attendant d'avoir
auto it = toto.begin() )
Chez moi, souvent, il y a des choses comme:
class C
{
typedef std::map<...> Map;
typedef Map::const_iterator Iterator;
// ...
};
, avec des "typename" où il faut si C est un template. Convertit
les majuscules en minuscules, et ça doit marcher aussi. (La clé,
peut-être, c'est l'utilisation de std::. En somme, à peu près la
solution proposée par Jean-Marc.
> Je suis loin d'etre sur que ce soit une bonne idee, mais
> typedef ::X<int> X;
> devrait passer.
En effet, ça passe. Est-ce une bonne idée ? Je sais pas. Comment font les gens ? Il se trainent dans leur code des choses du genre
conteneur_metier< std::string , objet_metier< true > >::const_iterator it = toto.begi n() ou Titi::const_iterator it = toto.begin()
(en attendant d'avoir auto it = toto.begin() )
Chez moi, souvent, il y a des choses comme:
class C { typedef std::map<...> Map; typedef Map::const_iterator Iterator; // ... };
, avec des "typename" où il faut si C est un template. Convertit les majuscules en minuscules, et ça doit marcher aussi. (La clé, peut-être, c'est l'utilisation de std::. En somme, à peu près la solution proposée par Jean-Marc.
-- James Kanze
Marc Boyer
Le 01-12-2009, James Kanze a écrit :
On Dec 1, 1:40 pm, Marc Boyer wrote: Chez moi, souvent, il y a des choses comme:
class C { typedef std::map<...> Map; typedef Map::const_iterator Iterator; // ... };
, avec des "typename" où il faut si C est un template. Convertit les majuscules en minuscules, et ça doit marcher aussi.
Sauf que les minuscules me servent pour déclarer la variable. En fait, dans l'exemple réel, j'avais le problème à deux endroits, un Tree et un Registery (une surcouche à std::map), et ca n'avait pas trop de sens d'inventer un autre nom.
Merci, Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
Le 01-12-2009, James Kanze <james.kanze@gmail.com> a écrit :
On Dec 1, 1:40 pm, Marc Boyer <Marc.Bo...@cert.onera.fr.invalid>
wrote:
Chez moi, souvent, il y a des choses comme:
class C
{
typedef std::map<...> Map;
typedef Map::const_iterator Iterator;
// ...
};
, avec des "typename" où il faut si C est un template. Convertit
les majuscules en minuscules, et ça doit marcher aussi.
Sauf que les minuscules me servent pour déclarer la variable.
En fait, dans l'exemple réel, j'avais le problème à deux endroits,
un Tree et un Registery (une surcouche à std::map), et ca n'avait
pas trop de sens d'inventer un autre nom.
Merci,
Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
On Dec 1, 1:40 pm, Marc Boyer wrote: Chez moi, souvent, il y a des choses comme:
class C { typedef std::map<...> Map; typedef Map::const_iterator Iterator; // ... };
, avec des "typename" où il faut si C est un template. Convertit les majuscules en minuscules, et ça doit marcher aussi.
Sauf que les minuscules me servent pour déclarer la variable. En fait, dans l'exemple réel, j'avais le problème à deux endroits, un Tree et un Registery (une surcouche à std::map), et ca n'avait pas trop de sens d'inventer un autre nom.
Merci, Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0