当前位置:   article > 正文

C++格式化输出开源库fmt入手教程

C++格式化输出开源库fmt入手教程

fmt项目快速上手指南

1. cmake环境配置

include(FetchContent)
FetchContent_Declare(
    fmt
    GIT_REPOSITORY https://github.com/fmtlib/fmt
    GIT_TAG 10.0.0
    GIT_SHALLOW TRUE)
# 1. 下载fmt库
FetchContent_MakeAvailable(fmt)

add_executable(fmt_guide main.cpp)
# 2. 链接fmt库
target_link_libraries(fmt_guide PRIVATE fmt::fmt)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2. 快速上手

  • c++的文本可视化,与python相比,还是过于麻烦了。
  • c++ 20标准则对此进行了改进, 实现了类似python的效果,大家具体可以参考: c++20 format官网文档

如果不是c++ 20,还想要简化字符串的格式化,和输入输出流的简化。那就可以使用我们今天要介绍的开源项目,fmt,

  • 该项目的文档位于: fmt 官网文档

  • 该项目代码开源与GitHub: fmt-gtihub

  • 格式API在精神上与C print函数家族相似,但比通用标准库实现更安全、更简单且速度快好几倍。格式字符串语法类似于Python中str.form使用的语法。

  • 该项目总体API比较简洁,通过下面的demo,就可以快速上手!

3. 使用dmeo


#include <fmt/color.h>
#include <fmt/core.h>
#include <fmt/os.h>
#include <fmt/ranges.h>
#include <iostream>
#include <vector>
using namespace std;

int main(int argc, char const *argv[]) {
  // 1. 格式化到字符串
  std::string s = fmt::format("The answer is {}.\n", 42);
  cout << s << endl;

  // 2. 格式化输出
  fmt::print("fuck you {} \n", "dd");
  fmt::print(
      "print vector: {} \n",
      std::vector{1, 2, 3, 4,
                  5}); // 打印STL容器需要包含头文件 #include <fmt/ranges.h>

  // 3. 带颜色输出
  // 彩色输出需要包含该头文件 <fmt/color.h>
  fmt::print(fg(fmt::color::green), "success\n");
  fmt::print(fg(fmt::color::orange) | fmt::emphasis::underline, "warning\n");
  fmt::print(fg(fmt::color::red) | fmt::emphasis::bold |
                 fmt::emphasis::underline,
             "danger\n");
  ;

  // 4. 输出到文件 需要包含头文件 #include <fmt/os.h>
  auto fout = fmt::output_file("readme.txt");
  fout.print("{} is an open-source formatting library providing a fast and "
             "safe alternative to C stdio and C++ iostreams.\n",
             "fmt");
  return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

实际输出结果:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/422898
推荐阅读
相关标签
  

闽ICP备14008679号