问题标签 [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 投票
3 回答
1065 浏览

python - Python 中的 % 或 .format 运算符的 C++ 等价物是什么?

我对 C++ 很陌生,我正在编写一个程序,该程序需要一个与 Python % 运算符执行相同操作的运算符。C ++中有任何等价物吗?

0 投票
2 回答
355 浏览

c++20 - 将 libfmt 与旧版 API 一起使用

我想在遗留 C API 之上针对现代格式库(特别是 libfmt)测量 vsnprintf 的性能。不能直接在调用者处使用 C++。我怎样才能做到这一点?

我们得到的参数并不意外地是一个格式字符串,后跟一个可变参数列表。输出需要以零终止。如果这无法获得最大性能,我将不得不手动实例化每个格式字符串的一个版本。现在我正试图避免这种情况。

目标是具有提供的最大长度的缓冲区。我们不能将堆用于任何事情。没有堆。

0 投票
1 回答
439 浏览

c++ - 尝试使用 ostream<< 运算符对象时与 {fmt} 6.2.1-3 + clang 10.0.0 的链接问题

在遇到 std::thread 的 get_id() 问题并通过 fmt 打印(即使我包含 fmt/ostream.h)后,我想我会整理这个简单的 fmt_test.cpp 文件(基于):

pacman 中可用的 fmt 版本是 6.2.1-3,这是我正在使用的版本。我正在使用带有以下参数的 clang 10.0.0 进行编译:

clang++ fmt_test.cpp -std=c++20 -stdlib=libc++ -O0 -g -o testbin -lfmt -v

我得到的输出是:

知道可能出了什么问题吗?我尝试使用其他参数,如 std=c++17 并在 -lfmt 的参数位置附近移动,但无济于事。:(

另一个例子,“fmt_test2.cpp”:

的构建输出clang++ -pthread -std=c++20 -stdlib=libc++ -lfmt -O0 -g fmt_test2.cpp -o testbin是:

0 投票
1 回答
122 浏览

c++ - 将任意文本添加到 fmt 的用户定义类型格式化程序

我想知道将一些任意文本添加到fmt::formatter::format. 基本上,我想为我的对象命名。当前的实现有效,但我不确定它是否可以做得更好,而且我觉得我的垂直对齐黑客可以做得更好。

0 投票
1 回答
1427 浏览

c++ - libfmt 和 std::format 有什么区别?

我知道 c++20 格式提案是libfmt部分的形式化,而 libfmt 是该形式化的兼容实现。但是,据我了解,libfmt 提供了超出 c++20 标准中指定的附加功能。有哪些附加功能?

另外,主要的编译器供应商是简单地包含 libfmt 的一个子集还是重新实现它?

0 投票
2 回答
136 浏览

c++ - 格式化windows结构

使用 fmt lib 创建格式化程序以在我的代码中打印一些 Windows 结构时遇到一些麻烦。我在下面准备了一个基本示例。目的是能够以预先结构化的方式打印出一个大型结构,并且只打印我想要的内容,但我不太明白我得到的错误。

error C2338: Cannot format an argument. To make type T formattable provide a formatter<T> specialization: https://fmt.dev/dev/api.html#udt这种格式会在fmt::print(L"LogonSession Data\n{}\n", *pData);被调用时抛出。

任何帮助使这个格式化程序工作?

0 投票
2 回答
876 浏览

c++ - 如何在 C++20 中使用格式打印毫秒

我有以下代码,我正在努力获得做我想做的声明的方式。

我希望将当前时间输出到毫秒精度(四舍五入也可以,例如 129999 我们可以四舍五入到 129 毫秒,但在这种情况下我更喜欢 130)。

注意:我正在使用 fmt ,因为从我看到<format>的标题中仍然没有实现。

0 投票
1 回答
1091 浏览

c++ - 如何测试控制台是否支持 ANSI 颜色代码?

我使用基于 fmt 的记录器和可选的彩色打印 - 它依赖于 ANSI 颜色命令。

不幸的是,在 Windows 10 上它默认被禁用。我知道如何启用它,但我仍然想知道如何测试控制台是否支持 ANSI 命令。有人知道吗?

0 投票
1 回答
87 浏览

c++ - 临时对象的堆栈空间是否被重用?

我刚刚在 format_int 类的 fmt 库中发现了一些东西。它有一个 char 缓冲区成员,这样当您调用类时,堆栈空间会在调用方法的堆栈上分配。您可以从 format_int 返回一个 char * ,即使在类被破坏后它仍然有效。虽然 std::string 也有一个可能返回堆栈内存的 c_str 成员,但 std::string 的析构函数会清除此内存,迫使用户在对象生命周期内使用它。因此,相比之下,短暂的 std::string 对象会强制您在对象被破坏之前使用 c_str 的结果,而 format_int 允许您将格式化的缓冲区用于函数的其余部分。

c++ 是否保证在函数结束之前不会重用堆栈,在调用函数的生命周期内(超出 format_int 对象的生命周期)从 format_int 类中保留缓冲区是否安全?这种行为是我的编译器(MSVC)的怪癖吗?

附言。我知道持有内存是非常狡猾的,我只是好奇在现实世界中编译器是否会重用堆栈,或者语言是否禁止这种行为。

0 投票
1 回答
688 浏览

c++ - 使用 fmtlib,当值为负时,零填充数值更短,我可以调整这种行为吗?

我正在使用fmtlib来格式化字符串和数值,但我遇到了负整数的问题。当我用零填充该值时,无论该值的符号如何,我都希望零个数一致。

例如,使用 4 的填充,我想要以下内容:

  • 2 作为“0002”返回
  • -2 作为“-0002”返回

fmtlib 的默认行为是将前缀长度(即符号“-”)考虑到填充长度中,这意味着 -2 返回为“-002”

这是一个例子:

将输出:-002

有没有办法切换这种行为或以不同的方式来零填充值以获得我的预期结果?

谢谢你的帮助,