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

c++ - 将 fmtlib 与 wofstream 一起使用的规范方法是什么

我们正在切换到 fmt 库,旨在重写许多基于宽字符输出流的格式。

我发现fmt::output_filewhich 返回一个class ostream : private detail::buffer<char>实例,但看起来不支持 wchar_t。

在宽字符输出流场景中使用格式库的规范方法是什么?

我能想到的唯一方法是手动打开 astd::wofstream并使用fmt::format. 这是在路线图上还是我错过了什么?

0 投票
1 回答
955 浏览

c++ - 为什么 fmt::format 不接受字符串作为参数?

我之前已经成功使用过这个fmt库,所以我不确定我为什么会遇到这个问题。首先,我将向您展示产生错误的代码:

这是构建日志(注意:我使用 VSCode 作为我的编辑器和 CMake 来使用 Visual Studio 2019 的编译器构建项目):

这些错误听起来好像fmt没有fmt::formatter<std::string>专业化,这对我来说听起来不正确,所以我要么配置错误,要么没有包含标题或其他东西。坦白说,我很困惑。一旦我得到答案,知道我的运气可能会很愚蠢。无论如何,提前感谢您提供的任何帮助。

0 投票
0 回答
149 浏览

c++ - Fmtlib 和 Format.h 未在 MAC CLANG 上链接

在 Mac 上,我使用 Brew 安装了 fmt 并尝试将 fmt/format.h 包含在#include <fmt/format.h>

但是 Clang 返回此错误:fatal error: 'fmt/format.h' file not found 我检查了路径并且该文件存在于我的硬盘驱动器上。

它包含在 PATH 中,但这并没有解决它。

有人可以帮忙吗?

0 投票
1 回答
80 浏览

c++ - {fmt} 只替换字符串中的一个位置参数几个位置参数

我想知道 {fmt} 库是否只允许修改包含多个位置参数的字符串中的一个位置参数?

这是我的测试不起作用,{fmt} 文档显示没有解决方案

我想得到John is {nb} years old and lives in {city},可以吗?

0 投票
1 回答
382 浏览

c++ - 为什么 C++20 格式对格式字符串没有强类型定义?

C++20 引入了以下格式函数(locale 和 wstring_view 版本被忽略,因为它们不影响问题):

这没有错,但我想知道为什么没有接受“强类型定义”的重载,比如

我的猜测是以下部分或全部:

  1. 实施的复杂性增加

  2. 增加编译时间

  3. 代码膨胀

,但我想知道在标准化过程中是否曾讨论过这个问题。

0 投票
1 回答
447 浏览

c++ - 未解析的外部使用 fmt::format 返回 std::wstring

我在 Visual Studio 2019 中使用 fmt 7.1.3。

我获取 fmt src 文件并制作一个静态库。

当我将此库链接到执行以下操作的 exe 项目中时:

它编译但因链接器错误而失败:

未解析的外部符号“类 std::basic_string<wchar_t,struct std::char_traits<wchar_t>,类 std::allocator<wchar_t> > __cdecl fmt::v7::detail::vformat<wchar_t,0>(类 fmt: :v7::basic_string_view<wchar_t>,class fmt::v7::basic_format_args<class fmt::v7::basic_format_context<class fmt::v7::detail::buffer_appender<wchar_t>,wchar_t> >)" (?? $vformat@_W$0A@@detail@v7@fmt@@YA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@V?$basic_string_view@ _W@12@V?$basic_format_args@V?$basic_format_context@V?$buffer_appender@_W@detail@v7@fmt@@_W@v7@fmt@@@12@@Z) 在函数“class std::basic_string”中引用<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > __cdecl fmt::v7::format<wchar_t [10],int,wchar_t>(wchar_t const (&)[10],整数 &&)"

如果我使用 fmt-6.2.1 中的 src,相同的静态库配置可以正常工作。

谢谢你的帮助。

0 投票
1 回答
2938 浏览

c++ - 格式化没有这样的文件或目录

我试图使用 C++ 格式实用程序(std::format)。我试图编译这个简单的程序:

当我尝试编译时g++ -std=c++2a format_test.cpp,它给了我这个:

我有 GCC 10.2.0

0 投票
2 回答
376 浏览

c++ - C++ 中函数别名的“#define”宏的替代方案

fmtlib具有如下功能:

为了方便起见,我定义了一个宏,例如:

#define FMT fmt::format

我像这样使用它:

std::cout<<FMT("Name: {0}\n", "Joe");

在 C++11 中是否有替代使用宏的替代方法,最好是不会影响性能的?

0 投票
1 回答
415 浏览

c++ - 需要帮助在 Windows 10 上完成 {fmt} 的命令行安装

我是一名 Linux 用户,正在尝试在 Windows 上设置开发环境。我已经克隆了 fmt repo 并按照我在 Linux 上习惯的方式构建它:

现在我想安装它,以便可以将它包含在项目中。通常我会$ sudo make install,但我不确定在 Windows 上做什么,并且 fmt doc 页面没有任何用于 Windows 安装的内容。

当我使用 FLTK 执行相同的一组步骤时,我必须设置一个变量来帮助我找到东西:

但它似乎在寻找安装点,而不是构建目录。我怎样才能让它工作?

0 投票
0 回答
128 浏览

c++ - 具有“fmt”库的枚举的通用自定义流插入运算符

我怀疑这个问题的答案是相当明显的,但由于某种原因它让我无法理解。

我试图让fmt库对枚举类型使用通用流插入运算符。fmt默认情况下将枚举格式化为整数,但如果可用(至少在某些情况下),也会对用户定义的类型使用重载的插入运算符。

为了进行实验,我开始时不使用fmt, :

输出:

这使用带有标准输出流的自定义操作符(操作符被注释掉,它无法按预期编译)。foo::Enum1在这种情况下,即使未在命名空间中定义运算符,也会正确选择运算符foo

然后我做了同样的事情,但补充说fmt

输出:

fmt为全局命名空间中的枚举选择自定义运算符,但不为命名空间中的枚举选择自定义运算符foo

如果我将运算符放在与枚举相同的命名空间中:

我得到:

显示fmt在这种情况下选择重载。但这并没有多大用处,因为重载旨在成为通用解决方案,并且不同的枚举可能位于不同的命名空间中。

似乎是一个类似的问题在这里讨论。提供了两种解决方案。一种是将重载放在std命名空间中。这行得通,但是围绕它的规则相当严格,而且对我来说,这个特定用例是否有效并不是很明显。线程中的另一个解决方案是将运算符放在fmt包含之前。我也试过了:

但是,尽管它似乎对线程中的参与者有效,但对我来说,fmt仍然没有选择重载。(我认为该线程来自将枚举的默认格式作为整数添加到库之前,因此从那时起这种行为可能已经改变。)

有没有办法(除了将实现放在命名空间中)为将使用的枚举类型std实现单个通用运算符,即使该运算符位于全局命名空间中并且枚举位于另一个命名空间中?我意识到这里可能有一个与查找规则或类似规则有关的非常明显的答案,但如果有解决方案,我会错过它,所以我想我会在这里问。(我知道专业化是枚举格式化的另一种选择,但我对是否可以使用通用解决方案感兴趣。)<<fmtfmt::formatter<<