std::make_format_args, std::make_wformat_args
De cppreference.com
<tbody>
</tbody>
| 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.
El comportamiento no está definido si typename Context::template formatter_type<Ti> no cumple con los requisitos de Formatter para cualquier Ti en Args.
Parámetros
| args... | - | Los valores a usar como argumentos de formato. |
Valor de retorno
Un objeto que alberga los argumentos de formato.
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.
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) {
static int n{};
std::clog << std::format("{:04} : ", n++) << std::vformat(users_fmt, args) << '\n';
}
template <typename... Args>
constexpr void log(Args&&... args) {
// Generar cadena de formato "{} "...
std::array<char, sizeof...(Args) * 3 + 1> braces{};
constexpr const char 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
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) |