home | help
std::num_put(3) 	       C++ Standard Libary		 std::num_put(3)

NAME
     std::num_put - std::num_put

Synopsis
	Defined in header <locale>
	template<

	    class CharT,
	    class OutputIt = std::ostreambuf_iterator<CharT>

	> class num_put;

	Class  std::num_put encapsulates the rules for formatting numeric values
     as strings.
	Specifically, the types bool, long, unsigned long
	, long long, unsigned long long
	(since C++11), double, long double, void*, and of all  types  implicitly
     convertible
	to  these  (such as int or float) are supported. The standard formatting
     output
	operators (such as cout << n;) use the std::num_put  facet  of	the  I/O
     stream's locale
	to generate text representation of numbers.

	std-num put-inheritance.svg

					Inheritance diagram

	If a std::num_put specialization is not guaranteed to be provided by the
     standard
	library  (see  below),	the  behaviors of its put() and do_put() are not
     guaranteed as
	specified.

Specializations
	The standard library is guaranteed to provide the following  specializa-
     tions (they
	are required to be implemented by any locale object):

	Defined in header <locale>
	std::num_put<char>    creates narrow string representations of numbers
	std::num_put<wchar_t> creates wide string representations of numbers

	In  addition,  the  standard library is also guaranteed to provide every
     specialization
	that satisfies the following type requirements:

	  * CharT is one of
	       * char,
	       * wchar_t, and
	       * any other implementation-defined character container type  that
     meets the
		 requirements  for a character on which any of the iostream com-
     ponents can be
		 instantiated; and
	  * OutputIt must meet the requirements of LegacyOutputIterator.

Member types
	Member type Definition
	char_type   CharT
	iter_type   OutputIt

Member functions
	constructor   constructs a new num_put facet
		      (public member function)
	put	      invokes do_put
		      (public member function)

Protected member functions
	destructor   destructs a num_put facet
		     (protected member function)
	do_put	     formats a number and writes to output stream
	[virtual]    (virtual protected member function)

Member objects
	static std::locale::id id id of the locale
				  (public member object)

Example
     // Run this code

      #include <iostream>
      #include <iterator>
      #include <locale>
      #include <string>

      int main()
      {
	  double n = 1234567.89;
	  std::cout.imbue(std::locale("de_DE.UTF-8"));
	  std::cout << "Direct conversion to string:\n"
		    << std::to_string(n) << '\n'
		    << "Output using a german locale:\n"
		    << std::fixed << n << '\n'
		    << "Output using an american locale:\n";

	  // use the facet directly
	  std::cout.imbue(std::locale("en_US.UTF-8"));
	  auto& f = std::use_facet<std::num_put<char>>(std::cout.getloc());
	  f.put(std::ostreambuf_iterator<char>(std::cout), std::cout, ' ', n);
	  std::cout << '\n';
      }

Possible output:
      Direct conversion to string:
      1234567.890000
      Output using a german locale:
      1.234.567,890000
      Output using an american locale:
      1,234,567.890000

	Defect reports

	The following behavior-changing defect	reports  were  applied	retroac-
     tively to
	previously published C++ standards.

	   DR	  Applied  to	      Behavior as published		 Correct
     behavior
			    num_put was guaranteed to accept any only guarantees
     to accept
			    CharT that				 char,
	LWG 427  C++98	    meets the requirements  for  a	    wchar_t  and
     other
			    character on which			 implementation-
			    any of the iostream components can	 defined charac-
     ter types
			    be instantiated
								 can   guarantee
     to accept
	LWG 2392 C++98	    only character type CharT could be	 implementation-
			    guaranteed to be accepted by num_put defined charac-
     ter container
								 types

See also
	numpunct   defines numeric punctuation rules
		   (class template)
	num_get    parses numeric values from an input character sequence
		   (class template)
	to_string  converts an integral or floating-point value to string
	(C++11)    (function)
	to_wstring converts an integral or floating-point value to wstring
	(C++11)    (function)

http://cppreference.com 	   2024.06.10			 std::num_put(3)

home | help