我试图格式化将在控制台中显示的简单字符串
long long duration = end - start;
double ms = static_cast<double>(duration) * 0.001;
std::string resoult = fmt::format("{} => Duration: {} micro, {} ms", m_Info.c_str(), duration, ms);
AE_TRACE(resoult);
其中m_Info为std :: string,持续时间为long long,ms为double。
结果如下:
-9891888000000.0 => Duration: 49172 micro, 412316861 ms
std :: string显示为随机数,ms假定为49172。
我尝试过
"{:s} => Duration: {:d} micro, {:f} ms"
,但在fmt::format_errror
中出现了。我在同一项目的其他文件中使用了相同的库,但没有得到这样的错误。
编辑
我在代码的同一部分中使用了其他一些fmt函数
long long duration = end - start;
double ms = duration * 0.001;
std::string test = "test";
fmt::memory_buffer temp;
fmt::format_to(temp, "{} {} {}", test, duration, ms);
AE_TRACE(fmt::format("{} {} {}", test, duration, ms));
AE_TRACE(temp.data());
AE_TRACE("{} {} {}"_format(test, duration, ms));
AE_TRACE(test);
所有std::string
和double
都显示为一些随机数。
最后一个函数正确地打印了未格式化的std::string
,当我尝试使用long long
和double
时也是如此。
答案 0 :(得分:1)
您没有提供足够的信息来调试此问题,但您的fmtlib副本和spdlog中的副本可能互不相同。 spdlog提供了一个cmake配置变量来防止这种情况发生,即(来自我的cmake文件)
set(SPDLOG_FMT_EXTERNAL ON CACHE BOOL "Use common fmtlib")
您可能想尝试一下。
答案 1 :(得分:-1)
我找到了原因。这是因为我在spdlog
fmt
之前
#include "../log/Log.h"
#include "fmt/format.h"
之后
#include "fmt/format.h"
#include "../log/Log.h"