std::time_get<CharT,InputIt>:: get_year, std::time_get<CharT,InputIt>:: do_get_year
|
Défini dans l'en-tête
<locale>
|
||
|
public
:
iter_type get_year
(
iter_type s, iter_type end,
std::
ios_base
&
str,
|
(1) | |
|
protected
:
virtual
iter_type do_get_year
(
iter_type s, iter_type end,
std::
ios_base
&
str,
|
(2) | |
do_get_year
de la classe la plus dérivée.
[
beg
,
end
)
et analyse l'année en utilisant un format défini par l'implémentation. Selon les paramètres régionaux, les années à deux chiffres peuvent être acceptées, et il est défini par l'implémentation à quel siècle elles appartiennent.
L'année analysée est stockée dans le champ std::tm de la structure t - > tm_year .
Si l'itérateur de fin est atteint avant qu'une année valide soit lue, la fonction positionne std::ios_base::eofbit dans err . Si une erreur d'analyse est rencontrée, la fonction positionne std::ios_base::failbit dans err .
Table des matières |
Paramètres
| beg | - | itérateur désignant le début de la séquence à analyser |
| end | - | itérateur indiquant la fin de la séquence à analyser (un après le dernier élément) |
| str | - | un objet de flux utilisé par cette fonction pour obtenir les facettes de locale lorsque nécessaire, par exemple std::ctype pour ignorer les espaces blancs ou std::collate pour comparer des chaînes |
| err | - | objet d'indicateurs d'erreur de flux modifié par cette fonction pour signaler les erreurs |
| t | - | pointeur vers l'objet std::tm qui contiendra le résultat de cet appel de fonction |
Valeur de retour
Itérateur pointant un caractère au-delà du dernier caractère dans
[
beg
,
end
)
qui a été reconnu comme faisant partie d'une année valide.
Notes
Pour les valeurs d'entrée à deux chiffres, de nombreuses implémentations utilisent les mêmes règles d'analyse que le spécificateur de conversion
'%y'
utilisé par
std::get_time
,
std::time_get::get()
, et la fonction POSIX
strptime()
: un entier à deux chiffres est attendu, les valeurs dans la plage
[
69
,
99
]
donnent les valeurs 1969 à 1999, la plage
[
00
,
68
]
donne 2000 à 2068. Les entrées à quatre chiffres sont généralement acceptées telles quelles.
Si une erreur d'analyse syntaxique est rencontrée, la plupart des implémentations de cette fonction laissent * t inchangé.
Exemple
#include <iostream> #include <iterator> #include <locale> #include <sstream> void try_get_year(const std::string& s) { std::cout << "Parsing the year out of '" << s << "' in the locale " << std::locale().name() << '\n'; std::istringstream str(s); std::ios_base::iostate err = std::ios_base::goodbit; std::tm t; std::time_get<char> const& facet = std::use_facet<std::time_get<char>>(str.getloc()); std::istreambuf_iterator<char> ret = facet.get_year({str}, {}, str, err, &t); str.setstate(err); std::istreambuf_iterator<char> last{}; if (str) { std::cout << "Successfully parsed, year is " << 1900 + t.tm_year; if (ret != last) { std::cout << " Remaining content: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } else std::cout << " the input was fully consumed"; } else { std::cout << "Parse failed. Unparsed string: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } std::cout << '\n'; } int main() { std::locale::global(std::locale("en_US.utf8")); try_get_year("13"); try_get_year("2013"); std::locale::global(std::locale("ja_JP.utf8")); try_get_year("2013年"); }
Sortie possible :
Parsing the year out of '13' in the locale en_US.utf8 Successfully parsed, year is 2013 the input was fully consumed Parsing the year out of '2013' in the locale en_US.utf8 Successfully parsed, year is 2013 the input was fully consumed Parsing the year out of '2013年' in the locale ja_JP.utf8 Successfully parsed, year is 2013 Remaining content: 年
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 248 | C++98 |
eofbit
n'était pas positionné lors de l'atteinte de l'itérateur de fin
|
positionne
eofbit
si une année valide n'a pas été lue
|
Voir aussi
|
(C++11)
|
analyse une valeur de date/heure selon un format spécifié
(modèle de fonction) |