c++ - 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
不涉及每个编译器的实现特定细节的情况下实现?
解决方案
您不能fmt::dynamic_format_arg_store
为std::format
自己可移植地实现等价物,因为 的表示std::basic_format_args
是标准库的实现细节。它可能会在 C++ 标准的未来版本之一中提供。
推荐阅读
- bash - How to execute WSL command with preloaded ".bash_aliases" from powershell
- java - How to terminate Camunda running process?
- three.js - 使用单个 AnimationClip 从网格(GLTF/FBX)管理动画
- python - TensorFlow 2.5 Mac M1 - 安装与 NumPy 库/Conda env 的兼容性问题
- express - 我的获取请求出现问题,请求正文变为空
- unit-testing - 有没有办法让等于(==)检查 kotlin.js.Date 对象工作?
- dart - 如果这两种情况,如何使代码等待工作?
- ios - 滚动视图中的多行可编辑文本和图像填充所有空间
- android - 我想从右向左滑动完成活动
- android - flutter_webview NavigationDecision.prevent 在 Android 上无法正常工作