fmt 库 - 格式化为(编译时)string_view

fmt Library - Formatting to a (compile-time) string_view

我想使用 fmt 库从我的格式参数创建一个 string_view。有很多关于将编译时字符串作为格式字符串传递的文档,但是,我想 output 编译时字符串,以便我可以在其他静态部分使用它我的代码。有没有办法做到这一点?到目前为止,我看到的所有功能 return a std::string;我也试过 format_to,但它似乎被 string_view 迭代器明确禁用(我假设它无论如何都不会在编译时工作,因为它正在变异)。这可能很简单,我只是在错误的地方寻找,我不知道。

我希望能够执行类似于以下操作的操作:

consteval std::string_view example(unsigned i){
    return fmt::something<std::string_view>("You sent {}"sv, i);
}

到目前为止,this 库似乎提供了我所需要的东西,但是,避免第二次依赖将是有利的。

您可以使用格式化字符串编译 (FMT_COMPILE):

#include <fmt/compile.h>

consteval auto example(unsigned i) -> std::array<char, 16> {
  auto result = std::array<char, 16>();
  fmt::format_to(result.data(), FMT_COMPILE("You sent {}"), i);
  return result;
}

constexpr auto result = example(42);

这给出了一个数组而不是一个 string_view 但你可以从前者得到后者。

神马:https://godbolt.org/z/TqoEfTfWs