On Tue, 22 Apr 2008 02:10:13 +0200, Mickaël Wolff :Le problème de find est qu'en fonction du conteneur, il ne renvoie pas
la même chose.
C'est vrai que les interfaces des types de la STL ne sont pas toujours
idéales. Mais il faut considérer les conteneurs standard comme des
briques de base ; tu peux facilement les encapsuler dans tes propres
classes, pour fournir l'interface qui te convient.alors que operator[] renvoie toujour une référence sur le type.
Attention, vector<>::operator[] ne lance pas non plus d'exception.
On Tue, 22 Apr 2008 02:10:13 +0200, Mickaël Wolff :
Le problème de find est qu'en fonction du conteneur, il ne renvoie pas
la même chose.
C'est vrai que les interfaces des types de la STL ne sont pas toujours
idéales. Mais il faut considérer les conteneurs standard comme des
briques de base ; tu peux facilement les encapsuler dans tes propres
classes, pour fournir l'interface qui te convient.
alors que operator[] renvoie toujour une référence sur le type.
Attention, vector<>::operator[] ne lance pas non plus d'exception.
On Tue, 22 Apr 2008 02:10:13 +0200, Mickaël Wolff :Le problème de find est qu'en fonction du conteneur, il ne renvoie pas
la même chose.
C'est vrai que les interfaces des types de la STL ne sont pas toujours
idéales. Mais il faut considérer les conteneurs standard comme des
briques de base ; tu peux facilement les encapsuler dans tes propres
classes, pour fournir l'interface qui te convient.alors que operator[] renvoie toujour une référence sur le type.
Attention, vector<>::operator[] ne lance pas non plus d'exception.
Comme je l'avais suggéré plus haut, peux-tu montrer le genre de codes
typiques que tu écrirais pourqu'on puisse juger si cela serait plus
concis et plus lisible ?
le type stocké est donné par value_type -- donc, cela renvoie bien la
même chose pour vector, list, et map. Au contraire, c'est operator[]
qui ne renvoie pas toujours une référence sur value_type.
Comme je l'avais suggéré plus haut, peux-tu montrer le genre de codes
typiques que tu écrirais pourqu'on puisse juger si cela serait plus
concis et plus lisible ?
le type stocké est donné par value_type -- donc, cela renvoie bien la
même chose pour vector, list, et map. Au contraire, c'est operator[]
qui ne renvoie pas toujours une référence sur value_type.
Comme je l'avais suggéré plus haut, peux-tu montrer le genre de codes
typiques que tu écrirais pourqu'on puisse juger si cela serait plus
concis et plus lisible ?
le type stocké est donné par value_type -- donc, cela renvoie bien la
même chose pour vector, list, et map. Au contraire, c'est operator[]
qui ne renvoie pas toujours une référence sur value_type.
Mickaël Wolff writes:Comme je l'avais suggéré plus haut, peux-tu montrer le
genre de codes typiques que tu écrirais pourqu'on puisse
juger si cela serait plus concis et plus lisible ?
class message
{
typedef std::map<std::string,std::string> map ;
public:
std::string & get_value(std::string key) const
throw(std::range_error)
{
// return m_value_list[key] ; // ça marche pas ©
map::const_iterator s = m_value_list.find(key) ;
if(s == m_value_list.end())
throw std::range_error("message::get_value()") ;
return s->second ;
}
protected:
map m_value_list ;
} ;
Ça c'est le code qui implémente l'équivalent de operator[] ;
ce que je demandait, c'est exemple d'utilisation.
le type stocké est donné par value_type -- donc, cela
renvoie bien la même chose pour vector, list, et map. Au
contraire, c'est operator[] qui ne renvoie pas toujours
une référence sur value_type.
Ben non :)
Comment ça non ?
Mickaël Wolff <mickael.wo...@laposte.net> writes:
Comme je l'avais suggéré plus haut, peux-tu montrer le
genre de codes typiques que tu écrirais pourqu'on puisse
juger si cela serait plus concis et plus lisible ?
class message
{
typedef std::map<std::string,std::string> map ;
public:
std::string & get_value(std::string key) const
throw(std::range_error)
{
// return m_value_list[key] ; // ça marche pas ©
map::const_iterator s = m_value_list.find(key) ;
if(s == m_value_list.end())
throw std::range_error("message::get_value()") ;
return s->second ;
}
protected:
map m_value_list ;
} ;
Ça c'est le code qui implémente l'équivalent de operator[] ;
ce que je demandait, c'est exemple d'utilisation.
le type stocké est donné par value_type -- donc, cela
renvoie bien la même chose pour vector, list, et map. Au
contraire, c'est operator[] qui ne renvoie pas toujours
une référence sur value_type.
Ben non :)
Comment ça non ?
Mickaël Wolff writes:Comme je l'avais suggéré plus haut, peux-tu montrer le
genre de codes typiques que tu écrirais pourqu'on puisse
juger si cela serait plus concis et plus lisible ?
class message
{
typedef std::map<std::string,std::string> map ;
public:
std::string & get_value(std::string key) const
throw(std::range_error)
{
// return m_value_list[key] ; // ça marche pas ©
map::const_iterator s = m_value_list.find(key) ;
if(s == m_value_list.end())
throw std::range_error("message::get_value()") ;
return s->second ;
}
protected:
map m_value_list ;
} ;
Ça c'est le code qui implémente l'équivalent de operator[] ;
ce que je demandait, c'est exemple d'utilisation.
le type stocké est donné par value_type -- donc, cela
renvoie bien la même chose pour vector, list, et map. Au
contraire, c'est operator[] qui ne renvoie pas toujours
une référence sur value_type.
Ben non :)
Comment ça non ?