std::make_format_args, std::make_wformat_args
De cppreference.com
Definido en el archivo de encabezado <format> | ||
template<class Context =std::format_context, class... Args> /*format-arg-store*/<Context, Args...> make_format_args(const Args&... args); | (1) | (desde C++20) |
template<class... Args> /*format-arg-store*/<std::wformat_context, Args...> make_wformat_args(const Args&... args); | (2) | (desde C++20) |
Devuelve un objeto que almacena un array de argumentos de formato y que puede convertirse implícitamente a std::basic_format_args<Context>.
El comportamiento no está definido si typename Context::template formatter_type<Ti> no cumple con los requisitos de Formatter para cualquier Ti
en Args
.
Contenido |
[editar]Parámetros
args... | - | Los valores a usar como argumentos de formato. |
[editar]Valor de retorno
Un objeto que alberga los argumentos de formato.
[editar]Notas
Un argumento de formato tiene semántica de referencia para tipos definidos por el usuario y no extiende el tiempo de vida de args
. Es la responsabilidad del programador asegurarse de que args
viva más allá del valor de retorno. Generalmente, el resultado solo se usa como un argumento para una función de formato.
[editar]Ejemplo
Ejecuta este código
#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){ // Generar cadena de formato "{} "...std::array<char, sizeof...(Args)*3+1> braces{};constexprconstchar c[4]="{} ";for(auto i{0u}; 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...));} int main(){ log("El número", "de", "argumentos", "es", "arbitrario."); log("Cualquier tipo que cumpla los requisitos de `Formatter`", "puede imprimirse."); log("Por ejemplo:", 1, 2.0, '3', "*42*"); raw_write_to_log("{:02} │ {} │ {} │ {}", std::make_format_args(1, 2.0, '3', "4"));}
Salida:
0000 : El número de argumentos es arbitrario. 0001 : Cualquier tipo que cumpla los requisitos de `Formatter` puede imprimirse. 0002 : Por ejemplo: 1 2.0 3 *42* 0003 : 01 │ 2.0 │ 3 │ 4
[editar]Véase también
(C++20)(C++20)(C++20)(C++20) | Clase que proporciona acceso a todos los argumentos de formato. (plantilla de clase) |
(C++20) | Variante de no plantilla de std::format utilizando una representación de argumento de tipo borrado. (función) |
(C++20) | Variante de no plantilla de std::format_to utilizando una representación de argumento de tipo borrado. (plantilla de función) |