 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Benoît Dejean Guest
|
Posted: Sun Apr 24, 2005 10:41 am Post subject: n1479 a propos de array::iterator |
|
|
Bonjour, je me pose une question quand à l'utilisation de std::iterator dans
l'implémentation de la STL. Je pense qu'il est raisonnable que tous les
iterator de la STL soient des sous-classes de std::iterator. Ce qui me permet
d'écrire des choses comme :
template<typename Sequence>
void print_all(const Sequence& seq)
{
typedef typename Sequence::const_iterator InputIterator;
typedef typename InputIterator::value_type ValueType;
typedef typename std::ostream_iterator<ValueType> OutputIterator;
std::copy(seq.begin(), seq.end(), OutputIterator(std::cout, ", "));
std::cout << 'n';
}
et d'utiliser cela avec std::vector, std::set, ...
Maintenant, je lis
A Proposal to Add a Fixed Size Array Wrapper to the Standard Library
Technical Report
http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2003/n1479.html
et en gras
typedef implementation defined iterator;
// See lib.container.requirements
typedef implementation defined const_iterator;
et évidemment le lien "See lib.container.requirements" en commentaire ne
fonctionne pas, ce qui me fait me poser des questions.
Ce qui m'inquiète, c'est l'implémentation que fournit gcc-4.0
libstdc++-v3/include/tr1/array
typedef value_type* iterator;
typedef const value_type* const_iterator;
avec une telle définition, mon code ne fonctionne plus. Je sais que gcc
fournit une implémentation expérimental, mais serait-elle légale ? Si oui,
pourquoi est-elle permise puisqu'apparemment elle rendrait std:array
incompatible avec ses les autres conteneurs de la STL ?
merci.
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Sun Apr 24, 2005 12:31 pm Post subject: Re: n1479 a propos de array::iterator |
|
|
Benoît Dejean <tazforever (AT) free (DOT) fr> writes:
| Quote: | Bonjour, je me pose une question quand à l'utilisation de std::iterator dans
l'implémentation de la STL. Je pense qu'il est raisonnable que tous les
iterator de la STL soient des sous-classes de std::iterator. Ce qui me permet
d'écrire des choses comme :
|
C'est une hypothèse raisonnable, mais en pratique non-universellement
vérifiée.
| Quote: | template<typename Sequence
void print_all(const Sequence& seq)
{
typedef typename Sequence::const_iterator InputIterator;
typedef typename InputIterator::value_type ValueType;
|
Rien n'interdit à std::vector
Utilise std::iterator_traits<>.
-- Gaby
|
|
| Back to top |
|
 |
Benoît Dejean Guest
|
Posted: Sun Apr 24, 2005 1:21 pm Post subject: Re: n1479 a propos de array::iterator |
|
|
Le Sun, 24 Apr 2005 07:31:49 -0500, Gabriel Dos Reis a écrit :
| Quote: | Benoît Dejean <tazforever (AT) free (DOT) fr> writes:
Rien n'interdit à std::vector<T>::iterator d'être un T*.
Utilise std::iterator_traits<>.
|
Merci, est-ce que je peux en conclure que je dois utiliser
std::iterator_traits<> systématiquement ?
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Sun Apr 24, 2005 5:13 pm Post subject: Re: n1479 a propos de array::iterator |
|
|
Benoît Dejean <tazforever (AT) free (DOT) fr> writes:
| Quote: | Le Sun, 24 Apr 2005 07:31:49 -0500, Gabriel Dos Reis a écrit :
Benoît Dejean <tazforever (AT) free (DOT) fr> writes:
Rien n'interdit à std::vector<T>::iterator d'être un T*.
Utilise std::iterator_traits<>.
Merci, est-ce que je peux en conclure que je dois utiliser
std::iterator_traits<> systématiquement ?
|
Pour ce gence de choses, il est plus fiable que la notation
i::value_type.
-- Gaby
|
|
| 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
|
|