fmt::dynamic_format_arg_store replacement/implementation 对于 std::format

fmt::dynamic_format_arg_store replacement/implementation for std::format

看起来 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);
}

我想用标准 std::format 替换 fmt。

我快速浏览了 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,其中 returns 是不同的类型。

是否可以为 std:format 实现 fmt:dynamic_format_arg_store 而无需了解每个编译器的具体实现细节?

您不能自己为 std::format 可移植地实现 fmt::dynamic_format_arg_store 的等价物,因为 std::basic_format_args 的表示是标准库的实现细节。它可能会在 C++ 标准的未来版本之一中提供。