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

标签 c++ string-formatting compile-time string-view fmt

我想使用 fmt 库从我的格式参数创建一个 string_view。有大量关于将编译时字符串作为格式字符串传递的文档,但是,我想输出 编译时字符串,以便我可以在代码的其他静态部分中使用它。有没有办法做到这一点?到目前为止,我看到的所有函数都返回一个 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

关于c++ - fmt 库 - 格式化为(编译时)string_view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71222176/

相关文章:

c++ - 如何在C++中删除一个对象?

c++ - 在 AllocConsole 之前执行 std::endl 会导致不显示 std::cout

wpf 字符串格式整数 1234 到 12 :34 only in XAML

c++ - 编译时文本到数字的翻译 (atoi)

d - 无法在 D 中的编译时递归地将 BigInt 乘以一定数量的迭代

python - 您怎么知道dnn支持的图层?

c++ - MSBuild BeforeBuild 步骤

python - 在 python 日志记录中是否有一个格式化程序来截断字符串?

c - 在 C90 中格式化输入(删除前导零和小数位)?

c++ - 在 C++ 中多次调用给定函数时,有没有办法引发编译时错误?