Bonjour,
Je cherche a connaitre le type de la valeur pointee par un iterateur
de type 'T'. Pour cela, j'utilise 'iterator_traits<T>::value_type'.
Cette methode echoue avec un 'back_inserter' car a priori, celui-ci ne
definit pas le type 'value_type' ni ne surcharge la definition de
'iterator_traits'. Par consequent, 'iterator_traits<T>::value_type'
renvoie le type 'void'.
J'ai cherche sur le web mais je n'ai rien trouve. Ai-je fait une
erreur (oubli d'un include) ?
Je suis sous Linux avec gcc 3.2.2.
Cordialement,
Sylvain
::value_type sera toujours void, la specialisation precedemment
definie ne s'appliquant pas a map, classe prenant au moins 2 parametres
Bonjour,
Je cherche a connaitre le type de la valeur pointee par un iterateur
de type 'T'. Pour cela, j'utilise 'iterator_traits<T>::value_type'.
Cette methode echoue avec un 'back_inserter' car a priori, celui-ci ne
definit pas le type 'value_type' ni ne surcharge la definition de
'iterator_traits'. Par consequent, 'iterator_traits<T>::value_type'
renvoie le type 'void'.
J'ai cherche sur le web mais je n'ai rien trouve. Ai-je fait une
erreur (oubli d'un include) ?
Je suis sous Linux avec gcc 3.2.2.
Cordialement,
Sylvain
::value_type sera toujours void, la specialisation precedemment
definie ne s'appliquant pas a map, classe prenant au moins 2 parametres
Bonjour,
Je cherche a connaitre le type de la valeur pointee par un iterateur
de type 'T'. Pour cela, j'utilise 'iterator_traits<T>::value_type'.
Cette methode echoue avec un 'back_inserter' car a priori, celui-ci ne
definit pas le type 'value_type' ni ne surcharge la definition de
'iterator_traits'. Par consequent, 'iterator_traits<T>::value_type'
renvoie le type 'void'.
J'ai cherche sur le web mais je n'ai rien trouve. Ai-je fait une
erreur (oubli d'un include) ?
Je suis sous Linux avec gcc 3.2.2.
Cordialement,
Sylvain
::value_type sera toujours void, la specialisation precedemment
definie ne s'appliquant pas a map, classe prenant au moins 2 parametres
Bonjour,
Je cherche a connaitre le type de la valeur pointee par un iterateur
de type 'T'. Pour cela, j'utilise 'iterator_traits<T>::value_type'.
Cette methode echoue avec un 'back_inserter' car a priori, celui-ci ne
definit pas le type 'value_type' ni ne surcharge la definition de
'iterator_traits'. Par consequent, 'iterator_traits<T>::value_type'
renvoie le type 'void'.
J'ai cherche sur le web mais je n'ai rien trouve. Ai-je fait une
erreur (oubli d'un include) ?
Bonjour,
Je cherche a connaitre le type de la valeur pointee par un iterateur
de type 'T'. Pour cela, j'utilise 'iterator_traits<T>::value_type'.
Cette methode echoue avec un 'back_inserter' car a priori, celui-ci ne
definit pas le type 'value_type' ni ne surcharge la definition de
'iterator_traits'. Par consequent, 'iterator_traits<T>::value_type'
renvoie le type 'void'.
J'ai cherche sur le web mais je n'ai rien trouve. Ai-je fait une
erreur (oubli d'un include) ?
Bonjour,
Je cherche a connaitre le type de la valeur pointee par un iterateur
de type 'T'. Pour cela, j'utilise 'iterator_traits<T>::value_type'.
Cette methode echoue avec un 'back_inserter' car a priori, celui-ci ne
definit pas le type 'value_type' ni ne surcharge la definition de
'iterator_traits'. Par consequent, 'iterator_traits<T>::value_type'
renvoie le type 'void'.
J'ai cherche sur le web mais je n'ai rien trouve. Ai-je fait une
erreur (oubli d'un include) ?
Un back_inserter étant un output_iterator, il n'a pas de value_type.
Pourquoi ? Peut-être pour éviter que l'on puisse croire pouvoir lire la
valeur pointée par un output_iterator, on déclare qu'elle est de type void.
Un back_inserter étant un output_iterator, il n'a pas de value_type.
Pourquoi ? Peut-être pour éviter que l'on puisse croire pouvoir lire la
valeur pointée par un output_iterator, on déclare qu'elle est de type void.
Un back_inserter étant un output_iterator, il n'a pas de value_type.
Pourquoi ? Peut-être pour éviter que l'on puisse croire pouvoir lire la
valeur pointée par un output_iterator, on déclare qu'elle est de type void.
Un back_inserter étant un output_iterator, il n'a pas de value_type.
Pourquoi ? Peut-être pour éviter que l'on puisse croire pouvoir lire
la valeur pointée par un output_iterator, on déclare qu'elle est de
type void.
Un back_inserter étant un output_iterator, il n'a pas de value_type.
Pourquoi ? Peut-être pour éviter que l'on puisse croire pouvoir lire
la valeur pointée par un output_iterator, on déclare qu'elle est de
type void.
Un back_inserter étant un output_iterator, il n'a pas de value_type.
Pourquoi ? Peut-être pour éviter que l'on puisse croire pouvoir lire
la valeur pointée par un output_iterator, on déclare qu'elle est de
type void.
Loïc Joly wrote in message
[...]Un back_inserter étant un output_iterator, il n'a pas de value_type.
Pourquoi ? Peut-être pour éviter que l'on puisse croire pouvoir lire
la valeur pointée par un output_iterator, on déclare qu'elle est de
type void.
Merci beaucoup. Du coup, je peux reformuler ma question.
Je veux creer une fonction qui utilise un 'output_iterator' (qui peut
etre un 'back_inserter'). Cette fonction a besoin de faire des
conversions de type vers le "pseudo" 'value_type' du dit iterateur.
Est-ce possible de le faire simplement ?
Loïc Joly <loic.actarus.joly@wanadoo.fr> wrote in message
[...]
Un back_inserter étant un output_iterator, il n'a pas de value_type.
Pourquoi ? Peut-être pour éviter que l'on puisse croire pouvoir lire
la valeur pointée par un output_iterator, on déclare qu'elle est de
type void.
Merci beaucoup. Du coup, je peux reformuler ma question.
Je veux creer une fonction qui utilise un 'output_iterator' (qui peut
etre un 'back_inserter'). Cette fonction a besoin de faire des
conversions de type vers le "pseudo" 'value_type' du dit iterateur.
Est-ce possible de le faire simplement ?
Loïc Joly wrote in message
[...]Un back_inserter étant un output_iterator, il n'a pas de value_type.
Pourquoi ? Peut-être pour éviter que l'on puisse croire pouvoir lire
la valeur pointée par un output_iterator, on déclare qu'elle est de
type void.
Merci beaucoup. Du coup, je peux reformuler ma question.
Je veux creer une fonction qui utilise un 'output_iterator' (qui peut
etre un 'back_inserter'). Cette fonction a besoin de faire des
conversions de type vers le "pseudo" 'value_type' du dit iterateur.
Est-ce possible de le faire simplement ?
Je veux creer une fonction qui utilise un 'output_iterator' (qui peut
etre un 'back_inserter'). Cette fonction a besoin de faire des
conversions de type vers le "pseudo" 'value_type' du dit iterateur.
Pourquoi ? Explique-nous le vrai problème, et peut-être on pourrait en
trouver une solution.
Je veux creer une fonction qui utilise un 'output_iterator' (qui peut
etre un 'back_inserter'). Cette fonction a besoin de faire des
conversions de type vers le "pseudo" 'value_type' du dit iterateur.
Pourquoi ? Explique-nous le vrai problème, et peut-être on pourrait en
trouver une solution.
Je veux creer une fonction qui utilise un 'output_iterator' (qui peut
etre un 'back_inserter'). Cette fonction a besoin de faire des
conversions de type vers le "pseudo" 'value_type' du dit iterateur.
Pourquoi ? Explique-nous le vrai problème, et peut-être on pourrait en
trouver une solution.
wrote in message
[...]Je veux creer une fonction qui utilise un 'output_iterator' (qui
peut etre un 'back_inserter'). Cette fonction a besoin de faire
des conversions de type vers le "pseudo" 'value_type' du dit
iterateur.
Pourquoi ? Explique-nous le vrai problème, et peut-être on pourrait
en trouver une solution.
En bref:
(a) L'objectif est de convertir des valeurs qui sont donnees a travers
leur representation en chaine de caracteres. Par exemple, on a en
entree "10" et "117" (de type 'std::string') et on veut en sortie 10
et 117 (de type 'int').
(b) En pratique, il y a un cas ou la destination des dites valeurs
peut-etre un conteneur quelconque. On accede a ce conteneur via un
iterateur dont le type est un parametre 'template' de la fonction.
Ainsi, par exemple, si on manipule un 'std::vector v', on peut soit
lui donner la bonne dimension (si on la connait) et passer 'v.begin()'
comme iterateur; soit garder 'v' tel quel et passer 'back_inserter(v)'
comme iterateur pour ajouter les valeurs a la fin de 'v'.
(c) D'ou le probleme suivant: quel est le type pointe par un iterateur
(qui peut etre un 'back_inserter') ? On en a besoin pour le point (a)
dans le cas decrit en (b).
J'espere etre clair. Si ce n'est pas le cas, dites-moi ou ca coince,
je detaillerai plus.
kanze@gabi-soft.fr wrote in message
[...]
Je veux creer une fonction qui utilise un 'output_iterator' (qui
peut etre un 'back_inserter'). Cette fonction a besoin de faire
des conversions de type vers le "pseudo" 'value_type' du dit
iterateur.
Pourquoi ? Explique-nous le vrai problème, et peut-être on pourrait
en trouver une solution.
En bref:
(a) L'objectif est de convertir des valeurs qui sont donnees a travers
leur representation en chaine de caracteres. Par exemple, on a en
entree "10" et "117" (de type 'std::string') et on veut en sortie 10
et 117 (de type 'int').
(b) En pratique, il y a un cas ou la destination des dites valeurs
peut-etre un conteneur quelconque. On accede a ce conteneur via un
iterateur dont le type est un parametre 'template' de la fonction.
Ainsi, par exemple, si on manipule un 'std::vector v', on peut soit
lui donner la bonne dimension (si on la connait) et passer 'v.begin()'
comme iterateur; soit garder 'v' tel quel et passer 'back_inserter(v)'
comme iterateur pour ajouter les valeurs a la fin de 'v'.
(c) D'ou le probleme suivant: quel est le type pointe par un iterateur
(qui peut etre un 'back_inserter') ? On en a besoin pour le point (a)
dans le cas decrit en (b).
J'espere etre clair. Si ce n'est pas le cas, dites-moi ou ca coince,
je detaillerai plus.
wrote in message
[...]Je veux creer une fonction qui utilise un 'output_iterator' (qui
peut etre un 'back_inserter'). Cette fonction a besoin de faire
des conversions de type vers le "pseudo" 'value_type' du dit
iterateur.
Pourquoi ? Explique-nous le vrai problème, et peut-être on pourrait
en trouver une solution.
En bref:
(a) L'objectif est de convertir des valeurs qui sont donnees a travers
leur representation en chaine de caracteres. Par exemple, on a en
entree "10" et "117" (de type 'std::string') et on veut en sortie 10
et 117 (de type 'int').
(b) En pratique, il y a un cas ou la destination des dites valeurs
peut-etre un conteneur quelconque. On accede a ce conteneur via un
iterateur dont le type est un parametre 'template' de la fonction.
Ainsi, par exemple, si on manipule un 'std::vector v', on peut soit
lui donner la bonne dimension (si on la connait) et passer 'v.begin()'
comme iterateur; soit garder 'v' tel quel et passer 'back_inserter(v)'
comme iterateur pour ajouter les valeurs a la fin de 'v'.
(c) D'ou le probleme suivant: quel est le type pointe par un iterateur
(qui peut etre un 'back_inserter') ? On en a besoin pour le point (a)
dans le cas decrit en (b).
J'espere etre clair. Si ce n'est pas le cas, dites-moi ou ca coince,
je detaillerai plus.
Un back_inserter étant un output_iterator, il n'a pas de value_type.
Pourquoi ? Peut-être pour éviter que l'on puisse croire pouvoir lire la
valeur pointée par un output_iterator, on déclare qu'elle est de type void.
Un back_inserter étant un output_iterator, il n'a pas de value_type.
Pourquoi ? Peut-être pour éviter que l'on puisse croire pouvoir lire la
valeur pointée par un output_iterator, on déclare qu'elle est de type void.
Un back_inserter étant un output_iterator, il n'a pas de value_type.
Pourquoi ? Peut-être pour éviter que l'on puisse croire pouvoir lire la
valeur pointée par un output_iterator, on déclare qu'elle est de type void.
J'ai compris, et je n'ai pas de solution facile. Le problème, c'est que
« output iterator » est une abstraction un peu trop loin de ce dont tu
as besoin. (Mais en fait, je ne sais pas pourquoi un « output iterator »
n'a pas de value_type. C'est vrai que *iter ne fonctionne pas du tout
comme une valeur, mais dans tous les cas, il y a bien un type cible
quand même.) Le mieux que je pourrais te proposer, c'est soit
d'implémenter une version de la fonction qui prend la collection, et
invoque back_inserter lui-même, ou d'exiger à ce que l'utilisateur donne
le type, du genre :
convertir< int >( source.begin(), source.end(), back_inserter( c ) ) ;
J'ai compris, et je n'ai pas de solution facile. Le problème, c'est que
« output iterator » est une abstraction un peu trop loin de ce dont tu
as besoin. (Mais en fait, je ne sais pas pourquoi un « output iterator »
n'a pas de value_type. C'est vrai que *iter ne fonctionne pas du tout
comme une valeur, mais dans tous les cas, il y a bien un type cible
quand même.) Le mieux que je pourrais te proposer, c'est soit
d'implémenter une version de la fonction qui prend la collection, et
invoque back_inserter lui-même, ou d'exiger à ce que l'utilisateur donne
le type, du genre :
convertir< int >( source.begin(), source.end(), back_inserter( c ) ) ;
J'ai compris, et je n'ai pas de solution facile. Le problème, c'est que
« output iterator » est une abstraction un peu trop loin de ce dont tu
as besoin. (Mais en fait, je ne sais pas pourquoi un « output iterator »
n'a pas de value_type. C'est vrai que *iter ne fonctionne pas du tout
comme une valeur, mais dans tous les cas, il y a bien un type cible
quand même.) Le mieux que je pourrais te proposer, c'est soit
d'implémenter une version de la fonction qui prend la collection, et
invoque back_inserter lui-même, ou d'exiger à ce que l'utilisateur donne
le type, du genre :
convertir< int >( source.begin(), source.end(), back_inserter( c ) ) ;