问题标签 [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.
c++ - CMake 添加 fmt 库
我有一个 CMake 项目,结构如下:
而这个 CMakeLists.txt.in 文件:
我从GoogleTest说明中复制粘贴了大部分内容。
Gtests 的使用非常适合我。
我想我想在我的项目中使用FMT 库。
我尝试了一些方法(例如直接从 gtest 复制方法)将 FMT 包含到我的项目中,但失败了。
我希望 CMake 下载此库并将其嵌入到我的项目中,因此我可以按如下方式使用 FMT:
目前我收到以下错误消息:
c++ - 使用 {fmt} 引用字符串
有什么方法可以打印使用{fmt}引用的字符串?
这是一个示例代码,显示了我想要实现的目标:
我希望代码打印Hello "Terens"!
而不是Hello Terens!
.
编辑:我想使用 API 来打印事先未知的不同数据(我正在为一个库编写这个,所以当数据是 astd::string
或std::string_view
.
c++ - 在为自定义类型实现格式化程序时如何有效地转发格式化参数
我正在尝试编写一个自定义格式化程序来帮助我打印矢量。我试图维护格式说明符,以便向量中的每个项目都以相同的方式格式化。
哪个输出:
复制格式字符串似乎过于笨重且效率低下,以便我可以将其反馈给另一个fmt::format
调用,尤其是当扩展类: fmt::formatter<ValueType>
已经在parse
内部为我们提供了一个完全有效的函数时(我在这个例子中重新实现了它只是为了以一种骇人听闻的方式获得所需的输出)。
我真的很想删除自定义解析实现并替换该行
和
除非它无效/无法编译。
这样做的正确方法是什么?
注意:我完全意识到在我的示例中扩展类型是没有意义的,并且我可以将它作为局部变量但是我正在尝试重用类的功能,所以扩展它感觉是正确的方向,即使我还没有找到解决方案。
我发现的所有其他示例的列表还没有帮助我:
- 使用 C++20 std::format() 以很酷的方式格式化字符串(仅适用于直接返回对超级实现的单个调用,但不需要重新实现解析或创建新的格式字符串)
- 用于自定义类的带有 {fmt} 的自定义格式说明符(丢弃格式或需要手动重新实现格式)
- 我主要复制的教程(几乎是我想要的,但仍然创建一个新的格式字符串而不是重用用户最初指定的格式字符串)
- 文档(同样,建议重新实现解析函数并
format
使用新的格式字符串调用,尽管调用者已经指定了一个并且存在该类型的现有解析函数......)
visual-c++ - 在 c++ 项目中使用 spdlog
在对代码进行一些操作后,我得到了链接错误:
在谷歌搜索时,我发现这可能与fmt
图书馆有关。我没有直接fmt
在我的项目中使用,但它可能被spdlog
. 如何了解什么系统正在搜索并且无法链接?如何解决这个问题呢?
c++ - 使用 fmtlib 格式化 ISO 时间
我正在尝试std::string
使用 fmtlib 获得 ISO 时间。考虑以下代码:
我收到以下错误:
../deps/fmt-src/include/fmt/chrono.h: 在函数'size_t fmt::v7::detail::strftime(char*, size_t, const char*, const tm*)': ../ deps/fmt-src/include/fmt/chrono.h:377:48:错误:格式不是字符串文字,格式字符串未检查 [-Werror=format-nonliteral] 返回 std::strftime(str, count, format,时间);
我不明白,显然fmt::localtime(t)
不是编译时字符串。
我错过了什么?
使用 fmtlib v7.1.3,使用以下标志编译以在嵌入式系统上工作:
c++ - 如何在仅标头模式下使用 fmt 库?
很难使用 fmt 库的仅标头模式。这是我详细尝试的内容:我从https://fmt.dev/latest/index.html下载了 fmt7.1.3 ,仅将目录fmt-7.1.3/include/fmt
放在目录([trgdir]
)中并编写了 test.cpp 如下:
然后在我使用的终端中
我将 gcc 定义为
我得到的错误是
我已经检查了这篇文章,但我仍然无法解决我的问题。如何使用 fmt 库而不获取“架构 x86_64 的未定义符号”
c++ - 静态链接库
我的项目使用了一些我放在下面的库Linker->Input->Additional dependencies
:
我期待我的可执行项目将静态链接它们,并且不需要 dll。不幸的是,当我的可执行文件启动时,它会向所有 dll 询问其他库。
如何编译不问 dll 的项目?
c++ - 错误 C2661 'fmt::v7::print':没有重载函数需要 3 个参数
我正在尝试做:
这会导致错误消息:Error C2661 'fmt::v7::print': no overloaded function takes 3 arguments
。
查看此处的官方文档显示fmt::print
为:
这表明参数的数量不应该是一个问题,事实上,它不是。如果我用std::endl
随机的东西1
代替,它编译和构建就好了!这里有什么问题?
c++ - 为什么 fmt 将 0.5 舍入为 0,小数点为零?
我在我的项目中完全实现了 fmt 库。但我发现的最后一个错误是,以前的值四舍五入到上限 (0.5 -> 1),而它们目前被四舍五入到下限 (0.5 -> 0)。
在尝试查找原因时,我发现:
我也试过,如果编译器可能将 0.5 存储为 0.49999999999 ...,但我找不到原因。
我使用带有 v140 编译器的 Microsoft Visual Studio 2017。
有谁知道为什么 fmt 将 0.5 舍入为 0,而不是 1。我以前使用标准 printf 库。
c++ - {fmt}:总是在函数中编译时检查格式字符串
我正在尝试创建一个自定义错误类,其构造函数通过将参数传递给fmt::format()
. 我希望它总是在编译时根据参数检查格式字符串,而不必FMT_STRING()
每次抛出时都明确使用。就像是:
使用前面的代码,我在 FMT_STRING() 宏上遇到错误:
我对模板编程的经验很少。如何让它始终在编译时检查格式字符串,而无需FMT_STRING()
每次都明确使用?