chenjunfu2-nbt-cpp v2.1.0
一个基于CPP20的NBT(Named Binary Tag)库
载入中...
搜索中...
未找到
NBT_Print.hpp
浏览该文件的文档.
1#pragma once
2
3#include <format>
4#include <stdio.h>
5
8
11{
15};
16
17
24{
28#if defined(_MSC_VER) && _MSC_VER < 1935 //旧版本MSVC 1935-不支持
29#define format_string _Fmt_string //使用MSVC库内部类型
30#endif
31
32private:
33 FILE *pfOutputInfo = NULL;
34 FILE *pfOutputWarn = NULL;
35 FILE *pfOutputErr = NULL;
36
37public:
45 NBT_Print(FILE *_pfOutputInfo = stdout, FILE *_pfOutputWarn = stderr, FILE *_pfOutputErr = stderr)
46 : pfOutputInfo(_pfOutputInfo)
47 , pfOutputWarn(_pfOutputWarn)
48 , pfOutputErr(_pfOutputErr)
49 {}
50
52 ~NBT_Print(void) = default;
53
62 template<typename... Args>
63 void operator()(NBT_Print_Level lvl, const std::format_string<Args...> fmt, Args&&... args) noexcept
64 {
65 FILE *pfOutput = NULL;
66 switch (lvl)
67 {
69 pfOutput = pfOutputInfo;
70 break;
72 pfOutput = pfOutputWarn;
73 break;
75 pfOutput = pfOutputErr;
76 break;
77 default:
78 //错误的等级不进行赋值,保持pfOutput为NULL,在后续跳过输出
79 break;
80 }
81
82 if (pfOutput == NULL)//为NULL跳过
83 {
84 return;
85 }
86
87 try
88 {
89 auto tmp = std::format(std::move(fmt), std::forward<Args>(args)...);
90 fwrite(tmp.data(), sizeof(tmp.data()[0]), tmp.size(), pfOutput);
91 }
92 catch (const std::exception &e)
93 {
94 fprintf(stderr, "ErrInfo Exception: \"%s\"\n", e.what());
95 }
96 catch (...)
97 {
98 fprintf(stderr, "ErrInfo Exception: \"Unknown Error\"\n");
99 }
100 }
101
109 template<typename... Args>
110 void operator()(const std::format_string<Args...> fmt, Args&&... args) noexcept
111 {
112 return operator()(NBT_Print_Level::Info, std::move(fmt), std::forward<Args>(args)...);
113 }
114};
NBT_Print_Level
用于指示信息打印等级的枚举
定义 NBT_Print.hpp:11
@ Info
普通信息
定义 NBT_Print.hpp:12
@ Warn
警告信息
定义 NBT_Print.hpp:13
@ Err
错误信息
定义 NBT_Print.hpp:14
void operator()(NBT_Print_Level lvl, const std::format_string< Args... > fmt, Args &&... args) noexcept
函数调用运算符重载,用于将类作为仿函数调用,通过使用指定等级输出信息
定义 NBT_Print.hpp:63
~NBT_Print(void)=default
默认析构
void operator()(const std::format_string< Args... > fmt, Args &&... args) noexcept
函数调用运算符重载,用于将类作为仿函数调用,默认使用Info等级输出信息
定义 NBT_Print.hpp:110
NBT_Print(FILE *_pfOutputInfo=stdout, FILE *_pfOutputWarn=stderr, FILE *_pfOutputErr=stderr)
通过c文件对象构造
定义 NBT_Print.hpp:45