Bonjour,
Me revoilà avec ma classe Triplet, dans ce genre (pour l'exemple) :
struct Triplet
{
int Values[ 3 ];
Triplet( int A, int B, int C )
{
this->Values[ 0 ] = A;
this->Values[ 1 ] = B;
this->Values[ 2 ] = C;
}
};
J'ai un vector de Triplet, je souhaiterais pouvoir lui appliquer des
algorithm tels que max_element, etc... sur
une dimension données des triplets (index 0, 1 ou 2). Quelle est la
meilleure solution ?
J'ai d'abord pensé à un functor d'accès spécial fourni comme comparateur et
l'utilisation de bind1st pour lui
donner la dimension à manipuler, mais je me suis tourné vers un wrapper
d'iterator :
template<typename T>
template<typename T>
class iter_wrapper
{
public:
iter_wrapper( const T & Iter, int Index ):
iter( Iter ), index( Index ) {}
"Michel Michaud" wrote in message news:<D_kWc.7911$...
Dans news:,
"Michel Michaud" wrote in message news:<%G8Wc.6738$...
7.1.2p2 A function defined within a class definition is an inline function. The inline specifier shall not appear on a block scope function declaration.
Est-ce que ça veut même dire que c'est illégal de le mettre ?
Non. La deuxième phrase parle des fonctions déclarées à la portée de bloc. Donc, quelque chose comme :
void f( std::istream& src ) { inline std::Vector< int > v( std::istream_iterator< int
( src ), std::istream_iterator< int >() ) ; // ...
}
est illégal :-).
Ah ok, je ne comprenais pas exactement « on a block scope function declaration ». J'aurais écrit « on a function declaration at block scope ».
À vrai dire, si je voulais être cohérent avec la terminologie dont se sert la norme ailleurs, j'aurais dit « local scope »:-). Mais la norme n'est pas toujours cohérente dans sa terminologie. (Je me démande : est-ce qu'il y a d'autres endroits où la norme parle de « block scope » ?)
Et même là, une classe possède aussi un bloc :
class C { // c'est pas un bloc ici ?
Je ne sais pas, mais si on parle de « scope », c'est « class scope ».
};
Je ne trouve pas la définition de block scope dans la norme, mais ça fait 25 heures que je n'ai pas dormi :-)
Même en dormant... En §3.3, la norme définit « local scope », « function prototype scope », « function scope » (uniquement pour les étiquettes), « namespace scope » et « class scope ». Intuitivement, j'aurais pensé que la liste est exhaustive, et qu'il n'y a pas de « block scope ». Mais je crois que l'intention est claire (ou est-ce que simplement parce que je sais ce qui est l'intention, ou au moins, croire la savoir).
-- James Kanze GABI Software http://www.gabi-soft.fr 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
"Michel Michaud" <mm@gdzid.com> wrote in message
news:<D_kWc.7911$DG.324181@news20.bellglobal.com>...
Dans news:d6652001.0408230105.68061903@posting.google.com,
"Michel Michaud" <mm@gdzid.com> wrote in message
news:<%G8Wc.6738$DG.152760@news20.bellglobal.com>...
7.1.2p2
A function defined within a class definition is an inline function.
The inline specifier shall not appear on a block scope function
declaration.
Est-ce que ça veut même dire que c'est illégal de le mettre ?
Non. La deuxième phrase parle des fonctions déclarées à la portée de
bloc. Donc, quelque chose comme :
void
f( std::istream& src )
{
inline std::Vector< int > v( std::istream_iterator< int
( src ),
std::istream_iterator< int >() ) ; // ...
}
est illégal :-).
Ah ok, je ne comprenais pas exactement « on a block scope function
declaration ». J'aurais écrit « on a function declaration at block
scope ».
À vrai dire, si je voulais être cohérent avec la terminologie dont se
sert la norme ailleurs, j'aurais dit « local scope »:-). Mais la norme
n'est pas toujours cohérente dans sa terminologie. (Je me démande :
est-ce qu'il y a d'autres endroits où la norme parle de « block
scope » ?)
Et même là, une classe possède aussi un bloc :
class C
{
// c'est pas un bloc ici ?
Je ne sais pas, mais si on parle de « scope », c'est « class scope ».
};
Je ne trouve pas la définition de block scope dans la norme, mais ça
fait 25 heures que je n'ai pas dormi :-)
Même en dormant... En §3.3, la norme définit « local scope », « function
prototype scope », « function scope » (uniquement pour les étiquettes),
« namespace scope » et « class scope ». Intuitivement, j'aurais pensé
que la liste est exhaustive, et qu'il n'y a pas de « block scope ». Mais
je crois que l'intention est claire (ou est-ce que simplement parce que
je sais ce qui est l'intention, ou au moins, croire la savoir).
--
James Kanze GABI Software http://www.gabi-soft.fr
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
"Michel Michaud" wrote in message news:<D_kWc.7911$...
Dans news:,
"Michel Michaud" wrote in message news:<%G8Wc.6738$...
7.1.2p2 A function defined within a class definition is an inline function. The inline specifier shall not appear on a block scope function declaration.
Est-ce que ça veut même dire que c'est illégal de le mettre ?
Non. La deuxième phrase parle des fonctions déclarées à la portée de bloc. Donc, quelque chose comme :
void f( std::istream& src ) { inline std::Vector< int > v( std::istream_iterator< int
( src ), std::istream_iterator< int >() ) ; // ...
}
est illégal :-).
Ah ok, je ne comprenais pas exactement « on a block scope function declaration ». J'aurais écrit « on a function declaration at block scope ».
À vrai dire, si je voulais être cohérent avec la terminologie dont se sert la norme ailleurs, j'aurais dit « local scope »:-). Mais la norme n'est pas toujours cohérente dans sa terminologie. (Je me démande : est-ce qu'il y a d'autres endroits où la norme parle de « block scope » ?)
Et même là, une classe possède aussi un bloc :
class C { // c'est pas un bloc ici ?
Je ne sais pas, mais si on parle de « scope », c'est « class scope ».
};
Je ne trouve pas la définition de block scope dans la norme, mais ça fait 25 heures que je n'ai pas dormi :-)
Même en dormant... En §3.3, la norme définit « local scope », « function prototype scope », « function scope » (uniquement pour les étiquettes), « namespace scope » et « class scope ». Intuitivement, j'aurais pensé que la liste est exhaustive, et qu'il n'y a pas de « block scope ». Mais je crois que l'intention est claire (ou est-ce que simplement parce que je sais ce qui est l'intention, ou au moins, croire la savoir).
-- James Kanze GABI Software http://www.gabi-soft.fr 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
Gabriel Dos Reis
writes:
[...]
| > Je ne trouve pas la définition de block scope dans la norme, mais ça | > fait 25 heures que je n'ai pas dormi :-) | | Même en dormant... En §3.3, la norme définit « local scope », « function | prototype scope », « function scope » (uniquement pour les étiquettes), | « namespace scope » et « class scope ». Intuitivement, j'aurais pensé | que la liste est exhaustive,
En fait, elle n'est pas exhaustive : il y a la portée des paramètres de template qui n'est pas formellement décrite là.
| et qu'il n'y a pas de « block scope ». Mais | je crois que l'intention est claire (ou est-ce que simplement parce que | je sais ce qui est l'intention, ou au moins, croire la savoir).
Je crois que tout le monde (du moins au sein du comité) comprend « block scope » comme « local scope ». C'est la première fois que je vois quelqu'un passer des heures à vouloir y voir une distinction.
-- Gaby
kanze@gabi-soft.fr writes:
[...]
| > Je ne trouve pas la définition de block scope dans la norme, mais ça
| > fait 25 heures que je n'ai pas dormi :-)
|
| Même en dormant... En §3.3, la norme définit « local scope », « function
| prototype scope », « function scope » (uniquement pour les étiquettes),
| « namespace scope » et « class scope ». Intuitivement, j'aurais pensé
| que la liste est exhaustive,
En fait, elle n'est pas exhaustive : il y a la portée des paramètres
de template qui n'est pas formellement décrite là.
| et qu'il n'y a pas de « block scope ». Mais
| je crois que l'intention est claire (ou est-ce que simplement parce que
| je sais ce qui est l'intention, ou au moins, croire la savoir).
Je crois que tout le monde (du moins au sein du comité) comprend
« block scope » comme « local scope ». C'est la première fois que je
vois quelqu'un passer des heures à vouloir y voir une distinction.
| > Je ne trouve pas la définition de block scope dans la norme, mais ça | > fait 25 heures que je n'ai pas dormi :-) | | Même en dormant... En §3.3, la norme définit « local scope », « function | prototype scope », « function scope » (uniquement pour les étiquettes), | « namespace scope » et « class scope ». Intuitivement, j'aurais pensé | que la liste est exhaustive,
En fait, elle n'est pas exhaustive : il y a la portée des paramètres de template qui n'est pas formellement décrite là.
| et qu'il n'y a pas de « block scope ». Mais | je crois que l'intention est claire (ou est-ce que simplement parce que | je sais ce qui est l'intention, ou au moins, croire la savoir).
Je crois que tout le monde (du moins au sein du comité) comprend « block scope » comme « local scope ». C'est la première fois que je vois quelqu'un passer des heures à vouloir y voir une distinction.
-- Gaby
Michel Michaud
Dans news:,
"Michel Michaud" wrote in message news:<D_kWc.7911$...
Je ne trouve pas la définition de block scope dans la norme, mais ça fait 25 heures que je n'ai pas dormi :-)
Même en dormant... En §3.3, la norme définit « local scope », « function prototype scope », « function scope » (uniquement pour les étiquettes), « namespace scope » et « class scope ». Intuitivement, j'aurais pensé que la liste est exhaustive, et qu'il n'y a pas de « block scope ». Mais je crois que l'intention est claire (ou est-ce que simplement parce que je sais ce qui est l'intention, ou au moins, croire la savoir).
Oui, je crois bien que j'avais compris aussi, mais parfois on peut se tromper en se fiant au « bon sens » et c'est pourquoi la norme explique habituellement clairement les termes qu'elle utilise. On peut certainement se dire que « block scope » est auto-descriptif, mais il y a d'autres termes au moins aussi clair qui sont définis précisément par la norme.
J'ai vu ton message sur csc++... Les réponses sont sans surprise...
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Dans news:d6652001.0408240101.79b12f5d@posting.google.com,
"Michel Michaud" <mm@gdzid.com> wrote in message
news:<D_kWc.7911$DG.324181@news20.bellglobal.com>...
Je ne trouve pas la définition de block scope dans la norme,
mais ça fait 25 heures que je n'ai pas dormi :-)
Même en dormant... En §3.3, la norme définit « local scope », «
function prototype scope », « function scope » (uniquement pour
les étiquettes), « namespace scope » et « class scope ».
Intuitivement, j'aurais pensé que la liste est exhaustive, et
qu'il n'y a pas de « block scope ». Mais je crois que
l'intention est claire (ou est-ce que simplement parce que je
sais ce qui est l'intention, ou au moins, croire la savoir).
Oui, je crois bien que j'avais compris aussi, mais parfois on
peut se tromper en se fiant au « bon sens » et c'est pourquoi
la norme explique habituellement clairement les termes qu'elle
utilise. On peut certainement se dire que « block scope » est
auto-descriptif, mais il y a d'autres termes au moins aussi
clair qui sont définis précisément par la norme.
J'ai vu ton message sur csc++... Les réponses sont sans
surprise...
--
Michel Michaud mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
"Michel Michaud" wrote in message news:<D_kWc.7911$...
Je ne trouve pas la définition de block scope dans la norme, mais ça fait 25 heures que je n'ai pas dormi :-)
Même en dormant... En §3.3, la norme définit « local scope », « function prototype scope », « function scope » (uniquement pour les étiquettes), « namespace scope » et « class scope ». Intuitivement, j'aurais pensé que la liste est exhaustive, et qu'il n'y a pas de « block scope ». Mais je crois que l'intention est claire (ou est-ce que simplement parce que je sais ce qui est l'intention, ou au moins, croire la savoir).
Oui, je crois bien que j'avais compris aussi, mais parfois on peut se tromper en se fiant au « bon sens » et c'est pourquoi la norme explique habituellement clairement les termes qu'elle utilise. On peut certainement se dire que « block scope » est auto-descriptif, mais il y a d'autres termes au moins aussi clair qui sont définis précisément par la norme.
J'ai vu ton message sur csc++... Les réponses sont sans surprise...
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/