Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

std::locale

2 réponses
Avatar
PasDeSpam
bonsoir,

j'essaie de formater la sortie "cout" pour que les nombres entiers aient
le separateur des milliers ( a la "francaise").

1 235 563

je fais
#include <locale>

std::locale loc("fr_FR")
cout.imbue(loc);

mais
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid

quand je fais locale -a
j'ai bien fr_FR

comment dois je faire?

merci

2 réponses

Avatar
PasDeSpam
Bruno Causse wrote:

bon, apres la lecture (hardu) de bjarne, j'utilise la classe My_punct

class My_punct:public std::numpunct<char> {
public:

typedef char char_type; //ca sert a quoi ici?
typedef string string_type; //


explicit My_punct(size_t r=0):numpunct<char>(r) {}

protected:
char do_decimal_point() const {return ',';}
char do_thousands_sep() const {return ' ';}
string do_grouping() const {return "03";}
};


que j'utilise comme ca

{
.../...
std::ostringstream buffer;

std::locale loc(locale(),new My_punct);
buffer.imbue(loc);
.../...
}

d'ou ma deuxieme question, dois je me soucier de la dealocation de
My_punct?


merci
Avatar
James Kanze
On Oct 8, 11:00 am, (Bruno Causse) wrote:
Bruno Causse wrote:



bon, apres la lecture (hardu) de bjarne, j'utilise la classe
My_punct



class My_punct:public std::numpunct<char> {
public:
typedef char char_type; //ca sert a quoi ici?
typedef string string_type; //



explicit My_punct(size_t r=0):numpunct<char>(r) {}



protected:
char do_decimal_point() const {return ',';}
char do_thousands_sep() const {return ' ';}
string do_grouping() const {return "03";}
};



que j'utilise comme ca



{
.../...
std::ostringstream buffer;

std::locale loc(locale(),new My_punct);
buffer.imbue(loc);
.../...
}



d'ou ma deuxieme question, dois je me soucier de la
dealocation de My_punct?



Non. Si tu régardes la documentation des std::locale::facet
(dont dérive std::numpunct<>), il prévoit un comptage de
références ; quand le dernière locale qui utilise ta facet est
détruit, il détruit également la facet. Si tu veux s'occuper
toi-même de la durée de vie de la facet, il faut appeler son
constructeur avec le paramètre 1.

--
James Kanze (GABI Software) email:
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