Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::make_format_args,std::make_wformat_args

      From cppreference.com
      <cpp‎ |utility‎ |format
       
       
       
      Formatting library
      Standard format specification
      Formatting functions
      (C++20)
      (C++20)
      (C++20)
      (C++20)
      Format strings
      Formatting concepts
      Formatter
      (C++20)
      Formatting arguments
      (C++20)(deprecated in C++26)
      make_format_argsmake_wformat_args
      (C++20)(C++20)
      Format error
       
      Defined in header<format>
      template<class Context=std::format_context,class...Args>

      /*format-arg-store*/<Context, Args...>

          make_format_args( Args&...args);
      (1)(since C++20)
      template<class...Args>

      /*format-arg-store*/<std::wformat_context, Args...>

          make_wformat_args( Args&...args);
      (2)(since C++20)

      Returns an object that stores an array of formatting arguments and can be implicitly converted tostd::basic_format_args<Context>.

      The behavior is undefined iftypename Context::template formatter_type<std::remove_const_t<Ti>> does not meet theBasicFormatter requirements for anyTi inArgs.

      The program is ill-formed if for any typeTi inArgs,Ti does not satisfy__formattable_with<Context>.

      2) Equivalent toreturn std::make_format_args<std::wformat_context>(args...);.

      Contents

      [edit]Parameters

      args... - values to be used as formatting arguments

      [edit]Returns

      An object that holds the formatting arguments.

      For each argumentt of typeT, letTD bestd::remove_const_t<std::remove_reference_t<T>>. The correspondingstd::basic_format_arg in the result is determined as below:

      [edit]Notes

      A formatting argument has reference semantics for user-defined types and does not extend the lifetime ofargs. It is the programmer's responsibility to ensure thatargs outlive the return value. Usually, the result is only used as argument to formatting function.

      Feature-test macroValueStdFeature
      __cpp_lib_format_uchar202311L(C++20)
      (DR)
      Formatting of code units as unsigned integers

      [edit]Example

      Run this code
      #include <array>#include <format>#include <iostream>#include <string_view> void raw_write_to_log(std::string_view users_fmt,std::format_args&& args){staticint n{};std::clog<<std::format("{:04} : ", n++)<<std::vformat(users_fmt, args)<<'\n';} template<typename...Args>constexprvoid log(Args&&...args){// Generate formatting string "{} "...std::array<char, sizeof...(Args)*3+1> braces{};constexprconstchar c[4]="{} ";for(auto i{0uz}; i!= braces.size()-1;++i)        braces[i]= c[i%3];    braces.back()='\0';     raw_write_to_log(std::string_view{braces.data()}, std::make_format_args(args...));} template<typename T>const T& unmove(T&& x){return x;} int main(){    log("Number","of","arguments","is","arbitrary.");    log("Any type that meets the BasicFormatter requirements","can be printed.");    log("For example:",1,2.0,'3',"*42*");     raw_write_to_log("{:02} │ {} │ {} │ {}",                     std::make_format_args(unmove(1), unmove(2.0), unmove('3'),"4"));}

      Output:

      0000 : Number of arguments is arbitrary.0001 : Any type that meets the BasicFormatter requirements can be printed.0002 : For example: 1 2.0 3 *42*0003 : 01 │ 2.0 │ 3 │ 4

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      P2418R2C++20objects that are neither const-usable nor copyable
      (such as generator-like objects) are not formattable
      allow formatting these objects
      P2905R2C++20make_format_args accepted rvalue arguments by forwarding referencesonly takes lvalue references
      P2909R4C++20char orwchar_t might be formatted as
      out-of-range unsigned integer values
      code units are converted to the corresponding
      unsigned type before such formatting
      LWG 3631C++20cv-qualified arguments were incorrectly handled after P2418R2handling corrected

      [edit]See also

      class that provides access to all formatting arguments
      (class template)[edit]
      (C++20)
      non-template variant ofstd::format using type-erased argument representation
      (function)[edit]
      (C++20)
      non-template variant ofstd::format_to using type-erased argument representation
      (function template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/format/make_format_args&oldid=169943"

      [8]ページ先頭

      ©2009-2025 Movatter.jp