【发布时间】:2021-12-19 18:24:20
【问题描述】:
看起来 c++20 std::format 不是 fmt 库的直接替代品。
查看 API (https://en.cppreference.com/w/cpp/utility/format),fmt::dynamic_format_arg_store 似乎不是标准的一部分。
目前在 fmt 中可以有如下代码:
#include <fmt/format.h>
#include <fmt/args.h>
int main()
{
auto store = fmt::dynamic_format_arg_store<fmt::format_context>();
store.push_back(42);
store.push_back( std::string { "abc1"} );
store.push_back(1.5f);
fmt::vprint("{} this is my {}. This is a number: {}.", store);
}
我想将 fmt 替换为标准的 std::format。
我快速浏览了fmt::dynamic_format_arg_store,它似乎使用了 fmt 的一些内部东西,所以看起来并不那么直接。
任何人都可以提供一些指导,说明如何使用std::format 在 fmt for C++20 之外实现上述功能?
编辑:
在fmt:dynamic_format_arg_store 中查看更深一点,它看起来像是在使用detail:make_arg 来创建一个参数。
我不知道如何从 std::format 获得等效的东西,因为我只看到 std::make_format_args 返回不同的类型。
是否可以为std:format 实现fmt:dynamic_format_arg_store 而无需了解每个编译器的具体实现细节?
【问题讨论】:
-
它是否必须是“动态的”?不能不使用
make_format_args,传递静态参数序列吗? -
恐怕它必须是动态的..我有一个后台线程弹出/反序列化格式字符串和
n队列中的参数数量,然后将它们存储到fmt: dynamic_format_arg_store,然后被格式化