Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een klassesjabloon die een object beschrijft dat kan fungeren als een landinstellings facet om conversies van numerieke waarden naar reeksen van het type CharTypete beheren.
Syntaxis
template <class CharType,
class OutputIterator = ostreambuf_iterator<CharType>>
class num_put : public locale::facet;
Parameterwaarden
CharType
Het type dat in een programma wordt gebruikt om tekens in een landinstelling te coderen.
OutputIterator
Het type iterator waarnaar de numerieke putfuncties hun uitvoer schrijven.
Opmerkingen
Net als bij een facet van de landinstelling heeft de statische object-id een initiële opgeslagen waarde van nul. Bij de eerste poging om toegang te krijgen tot de opgeslagen waarde wordt een unieke positieve waarde in id opgeslagen .
Constructeurs
| Constructeur | Beschrijving |
|---|---|
| num_put | De constructor voor objecten van het type num_put. |
Typedefs
| Typenaam | Beschrijving |
|---|---|
| char_type | Een type dat wordt gebruikt om een teken te beschrijven dat wordt gebruikt door een landinstelling. |
| iter_type | Een type dat een uitvoer-iterator beschrijft. |
Functies voor leden
| Lid, functie | Beschrijving |
|---|---|
| do_put | Een virtuele functie die wordt aangeroepen om een getal te converteren naar een reeks CharTypes die het getal vertegenwoordigt dat is opgemaakt voor een bepaalde landinstelling. |
| zet | Converteert een getal naar een reeks CharTypes die het getal vertegenwoordigt dat is opgemaakt voor een bepaalde landinstelling. |
Behoeften
Rubriek:<oord>
naamruimte: std
num_put::char_type
Een type dat wordt gebruikt om een teken te beschrijven dat wordt gebruikt door een landinstelling.
typedef CharType char_type;
Opmerkingen
Het type is een synoniem voor de sjabloonparameter CharType.
num_put::d o_put
Een virtuele functie die wordt aangeroepen om een getal te converteren naar een reeks CharTypes die het getal vertegenwoordigt dat is opgemaakt voor een bepaalde landinstelling.
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
bool val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
long val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
unsigned long val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
double val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
long double val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
const void* val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
const long long val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
const unsigned long long val) const;
Parameterwaarden
volgende
Een iterator die het eerste element van de ingevoegde tekenreeks aanpakt.
_Iosbase
Opgegeven de stroom die landinstellingen bevat met het numpunct facet dat wordt gebruikt om de uitvoer en vlaggen te interpuncteren voor het opmaken van de uitvoer.
_Vullen
Een teken dat wordt gebruikt voor afstand.
val-
Het getal of booleaanse type dat moet worden uitgevoerd.
Retourwaarde
Een uitvoer-iterator heeft betrekking op de positie die voorbij het laatste geproduceerde element valt.
Opmerkingen
De eerste virtuele beveiligde lidfunctie genereert sequentiële elementen die beginnen bij het produceren van een geheel getal uitvoerveld van de waarde val. De functie retourneert een iterator die de volgende plaats aangeeft om een element in te voegen buiten het gegenereerde uitvoerveld voor gehele getallen.
Het uitvoerveld voor gehele getallen wordt gegenereerd door dezelfde regels die door de afdrukfuncties worden gebruikt voor het genereren van char een reeks elementen naar een bestand. Elk dergelijk tekenelement wordt ervan uitgegaan dat het wordt toegewezen aan een equivalent element van het type CharType door een eenvoudige, een-op-een-toewijzing. Wanneer een afdrukfunctie een veld met spaties of het cijfer 0 opvult, do_put wordt in plaats daarvan echter gebruikt fill. De equivalente specificatie voor afdrukconversie wordt als volgt bepaald:
Als iosbase. vlaggen en
ios_base::basefield==ios_base::oct, de conversiespecificatie islo.Als iosbase.flags & ios_base::basefield ==
ios_base::hex, islxde conversiespecificatie .Anders is
ldde conversiespecificatie.
Als iosbase. breedte is niet-nul, een veldbreedte van deze waarde wordt voorafgegaan. De functie roept vervolgens iosbase aan. breedte(0) om de veldbreedte opnieuw in te stellen op nul.
Opvulling vindt alleen plaats als het minimum aantal elementen N dat is vereist voor het opgeven van het uitvoerveld kleiner is dan iosbase. breedte. Dergelijke opvulling bestaat uit een reeksN-breedtekopieën - van opvulling. Opvulling doet zich vervolgens als volgt voor:
Als iosbase. vlaggen en
ios_base::adjustfield==ios_base::links, de vlag - wordt voorafgegaan. (Opvulling vindt plaats na de gegenereerde tekst.)Als iosbase.flags & ios_base::adjustfield ==
ios_base::intern, wordt de vlag 0 voorafgegaan. (Voor een numeriek uitvoerveld vindt opvulling plaats waar het print functions-pad met 0.)Anders wordt er geen extra vlag voorafgegaan. (Opvulling vindt plaats vóór de gegenereerde reeks.)
Eindelijk:
Als iosbase. flags &
ios_base::showpos is nonzero, de vlag + wordt voorafgegaan door de conversiespecificatie.Als iosbase. flags & ios_base::showbase is nietzero, de vlag # wordt voorafgegaan door de conversiespecificatie.
De notatie van een uitvoerveld voor gehele getallen wordt verder bepaald door de facetvan de landinstelling die wordt geretourneerd door de aanroep use_facet<numpunct<Elem>( iosbase. getloc). Specifiek:
fac. groeperen bepaalt hoe cijfers links van een decimaalteken worden gegroepeerd
fac. thousands_sep bepaalt de volgorde waarmee groepen cijfers links van een decimaalteken worden gescheiden
Als er geen groeperingsbeperkingen worden opgelegd door fac.
groeperen (het eerste element heeft de waarde CHAR_MAX), dan geen exemplaren van fac.
thousands_sep worden gegenereerd in het uitvoerveld. Anders worden scheidingstekens ingevoegd nadat de afdrukconversie plaatsvindt.
De tweede virtuele beveiligde lidfunctie:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
unsigned long val) const;
gedraagt zich hetzelfde als de eerste, behalve dat het een conversiespecificatie vervangt van ldlu.
De derde virtuele beveiligde lidfunctie:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
double val) const;
gedraagt zich hetzelfde als de eerste, behalve dat het een drijvende-komma-uitvoerveld produceert van de waarde val. fac. decimal_point bepaalt de reeks die de gehele getallen van de breukcijferen scheidt. De equivalente specificatie voor afdrukconversie wordt als volgt bepaald:
Als iosbase. vlaggen en
ios_base::floatfield==ios_base::vast, de conversiespecificatie islf.Als iosbase. flags & ios_base::floatfield ==
ios_base::scientific, de conversiespecificatie isle. Als iosbase. vlaggen enios_base::hoofdletters zijn niet-nul,ewordt vervangen doorE.Anders is de conversiespecificatie lg. Als iosbase. flags & ios_base::hoofdletter is niet-nul,
gwordt vervangen doorG.
Als iosbase. flags & ios_base::fixed is nonzero of if iosbase. precisie is groter dan nul, een precisie met de waarde-iosbase. precisie wordt voorafgegaan aan de conversiespecificatie. Elke opvulling gedraagt zich hetzelfde als voor een geheel getal-uitvoerveld. Het opvullingsteken is opvulling. Eindelijk:
Als iosbase. flags &
ios_base::showpos is nonzero, de vlag + wordt voorafgegaan door de conversiespecificatie.Als iosbase. flags &
ios_base::showpoint is nonzero, de vlag # wordt voorafgegaan aan de conversiespecificatie.
De vierde virtuele beveiligde lidfunctie:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
long double val) const;
gedraagt zich hetzelfde als de derde, behalve dat de kwalificatie l in de conversiespecificatie wordt vervangen door L.
De vijfde virtuele beveiligde lidfunctie:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
const void* val) const;
gedraagt zich hetzelfde als de eerste, behalve dat de conversiespecificatie isp plus elke kwalificatie die nodig is om opvulling op te geven.
De zesde virtuele beveiligde lidfunctie:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
bool val) const;
gedraagt zich hetzelfde als de eerste, behalve dat er een Booleaanse uitvoerveld van val wordt gegenereerd.
Een Booleaanse uitvoerveld heeft een van de twee vormen. Als iosbase.flags & ios_base::boolalpha is false, retourneert do_put(_Next, _Iosbase, _Fill, (long)val)de lidfunctie, die doorgaans een gegenereerde reeks produceert van 0 (voor false) of 1 (voor true). Anders is de gegenereerde reeks een van beide fac. falsename (voor false) of fac.truename (voor true).
De zevende virtuele beveiligde lidfunctie:
virtual iter_type do_put(iter_type next,
ios_base& iosbase,
Elem fill,
long long val) const;
gedraagt zich hetzelfde als de eerste, behalve dat het een conversiespecificatie vervangt van ldlld.
De achtste virtuele beveiligde lidfunctie:
virtual iter_type do_put(iter_type next,
ios_base& iosbase,
Elem fill,
unsigned long long val) const;
gedraagt zich hetzelfde als de eerste, behalve dat het een conversiespecificatie vervangt van ldllu.
Voorbeeld
Zie het voorbeeld voor plaatsen, welke aanroepen do_put.
num_put::iter_type
Een type dat een uitvoer-iterator beschrijft.
typedef OutputIterator iter_type;
Opmerkingen
Het type is een synoniem voor de sjabloonparameter OutputIterator.
num_put::num_put
De constructor voor objecten van het type num_put.
explicit num_put(size_t _Refs = 0);
Parameterwaarden
_Refs
Een geheel getal dat wordt gebruikt om het type geheugenbeheer voor het object op te geven.
Opmerkingen
De mogelijke waarden voor de parameter _Refs en hun significantie zijn:
0: De levensduur van het object wordt beheerd door de landinstellingen die het object bevatten.
1: De levensduur van het object moet handmatig worden beheerd.
> 1: Deze waarden zijn niet gedefinieerd.
Er zijn geen directe voorbeelden mogelijk, omdat de destructor is beveiligd.
De constructor initialiseert het basisobject met landinstelling::facet(_ Refs).
num_put::p ut
Converteert een getal naar een reeks CharTypes die het getal vertegenwoordigt dat is opgemaakt voor een bepaalde landinstelling.
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
bool val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
long val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
unsigned long val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
Long long val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
Unsigned long long val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
double val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
long double val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
const void* val) const;
Parameterwaarden
dest
Een iterator die het eerste element van de ingevoegde tekenreeks aanpakt.
_Iosbase
Opgegeven de stroom die landinstellingen bevat met het numpunct facet dat wordt gebruikt om de uitvoer en vlaggen te interpuncteren voor het opmaken van de uitvoer.
_Vullen
Een teken dat wordt gebruikt voor afstand.
val-
Het getal of booleaanse type dat moet worden uitgevoerd.
Retourwaarde
Een uitvoer-iterator heeft betrekking op de positie die voorbij het laatste geproduceerde element valt.
Opmerkingen
Alle lidfuncties retourneren do_put(next, _Iosbase, _Fill, ). val
Voorbeeld
// num_put_put.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
locale loc( "german_germany" );
basic_stringstream<char> psz2;
ios_base::iostate st = 0;
long double fVal;
cout << "The thousands separator is: "
<< use_facet < numpunct <char> >(loc).thousands_sep( )
<< endl;
psz2.imbue( loc );
use_facet < num_put < char > >
( loc ).put(basic_ostream<char>::_Iter(psz2.rdbuf( ) ),
psz2, ' ', fVal=1000.67);
if ( st & ios_base::failbit )
cout << "num_put( ) FAILED" << endl;
else
cout << "num_put( ) = " << psz2.rdbuf( )->str( ) << endl;
}
The thousands separator is: .
num_put( ) = 1.000,67
Zie ook
<oord>
facetklasse
Thread Safety in de standaardbibliotheek van C++