首页 > 解决方案 > fmt::dynamic_format_arg_store 替换/实现 std::format

问题描述

看起来 c++20std::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 的一些内部东西,所以看起来并不那么直接。

任何人都可以提供一些关于如何在 fmt 之外使用 C++20 实现上述功能的指导std::format

编辑:

再深入一点,fmt:dynamic_format_arg_store它看起来像是detail:make_arg用来创建一个论点。

我不知道如何从中获得等效的东西,std::format因为我只看到std::make_format_args返回不同类型的东西。

是否fmt:dynamic_format_arg_store可以在std:format不涉及每个编译器的实现特定细节的情况下实现?

标签: c++stdc++20fmt

解决方案


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


推荐阅读