问题标签 [fmt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
399 浏览

c++ - 强制对 fmt 中的 std::string 进行 UTF-8 处理

在我的 C++17 项目中,我有一个已知包含 UTF-8 编码数据的 std::string。有什么方法可以强制 fmt 将其数据视为 UTF-8 以使其按预期工作?

0 投票
1 回答
99 浏览

c++ - 添加自定义类型格式,以及所有常用选项

我创建了一个 Decimal 类并想使用 fmt 库。我读到为格式化程序定义类型的方法是专门化fmt::formatter。但是,文档中没有关于如何调用现有公共基础设施的信息。字段对齐和整体宽度和填充字符的格式代码,例如:这应该是适用于任何类型的通用代码。
如何在不从头重新实现整个规范的情况下编写格式化程序专业化?

我想首先使我的类型与浮点格式说明符兼容,因此当类型从double十进制更改为时,它将继续工作;但随后添加特定于该类型的附加功能。

0 投票
3 回答
353 浏览

c++ - C++ fmtlib:如何将双精度转换为现有的 wchar_t 缓冲区?

我正在考虑从 snprintf 及其同类过渡到 fmtlib。想象一下这个虚构的代码:

如何在不复制 std::wstring 或 fmt_memory_buffer 的情况下将其转换为 fmtlib?所以,我希望 fmt::format_to 使用我现有的缓冲区。

0 投票
1 回答
136 浏览

c++ - 无法使用 {fmt} 库在一个字符串中格式化两个浮点数

我刚开始{fmt}在我的应用程序中使用该库,发现由于程序崩溃,我无法使用该库来格式化具有不同位数的两个浮点数。

经过一些实验,我意识到它实际上有点糟糕,因为在我格式化任何浮点数后我无法格式化任何东西{0:.0f}(或者0:.2f,就此而言)。

对我来说违反直觉的代码示例:

0 投票
1 回答
276 浏览

c++ - 关于打印 STL 容器以进行认可测试的公约

我正在使用优秀的ApprovalTests.cpp库编写批准测试。该库自动生成函数结果的“快照”。T使用ostream& operator<< (T val). _

此运算符一直是用于将某些值格式化为文本表示的 C++ 约定。虽然原始类型支持此运算符并且您可以为自定义类型编写自己的实现,但对于 STL 容器(如std::vector.

您可以实现自己的,甚至使用其他库,如fmtor pprint。以下是一些具有类似输出的示例。我使用泛型类型STREAM作为参数,而不是ApprovalTests.cpp 推荐ostream的具体类型,但这个想法没有改变。

for 循环

ostream_iterator

fmt

https://github.com/fmtlib/fmt

<fmt/ranges.h标题:

漂亮的印刷品

https://github.com/p-ranav/pprint

cxx-prettyprint

只需包含prettyprint.hpp,它就适用于 STL 容器。

这似乎是最简单的解决方案,但与其他解决方案有相同的问题,它可能会破坏其他代码。

大会?

在对 Rust 有一些经验之后,我发现对每个 C++ STL 容器都这样做很乏味。这样做可能会破坏其他代码,例如,相同的运算符已为向量重载。

在 Rust 中,您只需将#[Debug]struct格式化的文本添加到文本中,它就可以自动转换为文本表示形式,或者如果您需要一些非规范表示形式,您可以自己实现特征。结构作者有责任定义其Debug实现。这就是为什么 Rust 标准库中的每个容器都有自己的Debug实现。

我在问 C++ 中是否存在一些约定,或者有一些类似的标准提案。它可能对批准测试很有用,比如在我的例子中,但也适用于日志记录或调试(调试器可以使用此格式化程序向用户显示变量值)。

0 投票
0 回答
1062 浏览

c++ - 无法使用 g++9.2.1 编译 fmt/format.h

我正在尝试从 Packt 的C++20视频系列中编译示例代码。它使用 <fmt/format.h>,我是这样安装的:sudo apt install libfmt-dev. (我很乐意使用 C++20 的版本,但我认为 g++ 还没有。)

我在 Ubuntu 9.10 上;g++ 版本是g++ (Ubuntu 9.2.1-9ubuntu2) 9.2.1 20191008.

这是编译目标文件的命令。

它似乎工作。(我没有使用存储库附带的 Makefile 等,因为它们甚至没有达到这个程度。)这是链接的命令:

产生的错误消息如下。IDK 如果-lfmt是事情——在SO 页面上看到它

0 投票
1 回答
89 浏览

c++ - 我可以实现什么 fmt lib

我尝试将 fmt 库插入到我的项目中,但我真的不知道错过了什么。如果我编译它一切都好,但是当我想使用 fmt::format 函数时,我得到错误...... https://imgur.com/MDUYNN4

https://imgur.com/a/cFyrjty

https://imgur.com/KMu1ZTV 我制作了 .lib 文件但再次不起作用

我尝试制作自己的 .lib 文件,但不起作用。我错过了什么?

0 投票
3 回答
4924 浏览

c++ - Visual Studio 中的 C++20 支持

我想使用std::format,但 Visual Studio 说std命名空间没有 member format

看来这对于 C++20 来说是新的。有没有办法让它可用?

0 投票
1 回答
2223 浏览

c++ - 使用 fmt 链接错误:未定义对 `std::string fmt::v6::internal::grouping_impl 的引用(fmt::v6::internal::locale_ref)'

在我们的项目中,我们决定在我们的项目中使用最新的 fmt 版本(6.2.0)并主要使用 printf 功能,因为我们在广泛使用 printf 的地方进行了日志记录。

我使用 fmt 包中包含的 CMakeLists.txt 在我们的 Linux 机器上构建了 libfmt.a。在我的过程中,我包含了 libfmt 包含目录和 target_link_libraries。在我只使用的代码中#include<fmt/printf.h>。现在,当我编译代码时,代码被编译,但在链接时,我得到错误:还有很多,但以下是第一个,我相信如果这个问题得到解决,其余的将自动解决

abc.cpp:(.text._ZN3fmt2V68internal8groupingIcEESsNS1_10locale_refE[_ZN3fmt2v68internal8groupingIcEESsNS1_10locale_refE]+0X20): 对`std::string fmt::v6::internal::grouping_impl(fmtref::v6::internal::locale)的未定义引用

我做了一些分析,发现这个函数的定义存在于format-inl.h中。我尝试将它包含在我的代码中,但仍然存在相同的链接问题。

现在,当我在代码中定义宏FMT_HEADER_ONLY时,链接起作用了。

我的问题是:当我与库 libfmt.a 链接时,它无法找到该函数。为什么?我不想使用仅标题版本。

请让我知道如何解决这个问题。

0 投票
1 回答
577 浏览

c++ - 如何在 C++ 中有效地将集合格式化为字符串?

我有一个程序,它有一个字符串(需要格式化)并从外部源获取一组元素。
字符串必须使用集合的元素格式化,即 std::string。
我无法手动格式化字符串,例如:

这是因为集合中的元素数量是可变的。
我想做的是尽可能有效地格式化字符串。

这是代码:

注意 1:我使用 std::vector 来管理集合的元素,但我可以使用任何其他结构。

这就是为什么我没有将定义放在代码中。

此外,如果我有一个带有百分比的字符串,我编写的代码不起作用,例如:

总之:用多个元素格式化字符串的最有效方法是什么?
即使不使用向量,但使用另一种结构。还是使用 fmt 或 boost?(也许提升会降低效率)
我的开发环境是 Visual Studio 2019。