chenjunfu2-nbt-cpp v2.1.3
一个基于CPP20的NBT(Named Binary Tag)库
载入中...
搜索中...
未找到
IsLookLike_NBT_Visitor 概念参考

检查类型是否符合 NBT 访问器(Visitor)的接口要求 更多...

#include <NBT_Visitor.hpp>

概念定义

template<typename T>
requires(
T visitor,
NBT_Visitor nbt_visitor,
NBT_Type::Byte nbt_byte,
NBT_Type::Short nbt_short,
NBT_Type::Int nbt_int,
NBT_Type::Long nbt_long,
NBT_Type::Float nbt_float,
NBT_Type::Double nbt_double,
NBT_TAG nbt_tag,
size_t nbt_list_length,
size_t nbt_list_index,
NBT_Type::ByteArray nbt_bytearray,
NBT_Type::IntArray nbt_intarray,
NBT_Type::LongArray nbt_longarray,
NBT_Type::String nbt_string,
NBT_Print_Level nbt_print_level
)
{
//数值类型访问方法
{
visitor.VisitNumericResult(nbt_byte)
} -> std::same_as<decltype(nbt_visitor.VisitNumericResult(nbt_byte))>;
{
visitor.VisitNumericResult(nbt_short)
} -> std::same_as<decltype(nbt_visitor.VisitNumericResult(nbt_short))>;
{
visitor.VisitNumericResult(nbt_int)
} -> std::same_as<decltype(nbt_visitor.VisitNumericResult(nbt_int))>;
{
visitor.VisitNumericResult(nbt_long)
} -> std::same_as<decltype(nbt_visitor.VisitNumericResult(nbt_long))>;
{
visitor.VisitNumericResult(nbt_float)
} -> std::same_as<decltype(nbt_visitor.VisitNumericResult(nbt_float))>;
{
visitor.VisitNumericResult(nbt_double)
} -> std::same_as<decltype(nbt_visitor.VisitNumericResult(nbt_double))>;
//数组类型访问方法
{
visitor.VisitArrayResult(std::move(nbt_bytearray))
} -> std::same_as<decltype(nbt_visitor.VisitArrayResult(std::move(nbt_bytearray)))>;
{
visitor.VisitArrayResult(std::move(nbt_intarray))
} -> std::same_as<decltype(nbt_visitor.VisitArrayResult(std::move(nbt_intarray)))>;
{
visitor.VisitArrayResult(std::move(nbt_longarray))
} -> std::same_as<decltype(nbt_visitor.VisitArrayResult(std::move(nbt_longarray)))>;
//字符串访问方法
{
visitor.VisitStringResult(std::move(nbt_string))
} -> std::same_as<decltype(nbt_visitor.VisitStringResult(std::move(nbt_string)))>;
//结束标记访问方法
{
visitor.VisitEndResult()
} -> std::same_as<decltype(nbt_visitor.VisitEndResult())>;
//List相关方法
{
visitor.VisitListBegin(nbt_tag, nbt_list_length)
} -> std::same_as<decltype(nbt_visitor.VisitListBegin(nbt_tag, nbt_list_length))>;
{
visitor.VisitListElementBegin(nbt_tag, nbt_list_index)
} -> std::same_as<decltype(nbt_visitor.VisitListElementBegin(nbt_tag, nbt_list_index))>;
{
visitor.VisitListElementEnd(nbt_tag, nbt_list_index)
} -> std::same_as<decltype(nbt_visitor.VisitListElementEnd(nbt_tag, nbt_list_index))>;
{
visitor.VisitListEnd()
} -> std::same_as<decltype(nbt_visitor.VisitListEnd())>;
//Compound相关方法
{
visitor.VisitCompoundBegin()
} -> std::same_as<decltype(nbt_visitor.VisitCompoundBegin())>;
{
visitor.VisitCompoundNextEntryType(nbt_tag)
} -> std::same_as<decltype(nbt_visitor.VisitCompoundNextEntryType(nbt_tag))>;
{
visitor.VisitCompoundEntryBegin(nbt_tag, std::move(nbt_string))
} -> std::same_as<decltype(nbt_visitor.VisitCompoundEntryBegin(nbt_tag, std::move(nbt_string)))>;
{
visitor.VisitCompoundEntryEnd(nbt_tag, std::move(nbt_string))
} -> std::same_as<decltype(nbt_visitor.VisitCompoundEntryEnd(nbt_tag, std::move(nbt_string)))>;
{
visitor.VisitCompoundEnd()
} -> std::same_as<decltype(nbt_visitor.VisitCompoundEnd())>;
//开始/结束方法
{
visitor.VisitBegin()
};
{
visitor.VisitEnd()
};
//错误处理(不完全验证)
{
visitor.VisitError(nbt_print_level, "error message")
};
{
visitor.VisitError(nbt_print_level, "error with code: {}", 0)
};
{
visitor.VisitError(nbt_print_level, "error with info: {}", "test info")
};
}
NBT_Print_Level
用于指示信息打印等级的枚举
定义 NBT_Print.hpp:11
NBT_TAG
枚举NBT类型对应的类型标签值
定义 NBT_TAG.hpp:17
int8_t Byte
8位有符号整数
定义 NBT_Type.hpp:49
int16_t Short
16位有符号整数
定义 NBT_Type.hpp:50
NBT_String< MUTF8_String, MUTF8_String_View > String
字符串类型,存储Java M-UTF-8字符串
定义 NBT_Type.hpp:65
int64_t Long
64位有符号整数
定义 NBT_Type.hpp:52
std::conditional_t<(sizeof(float)==sizeof(Float_Raw)), float, Float_Raw > Float
单精度浮点类型
定义 NBT_Type.hpp:56
NBT_Array< std::vector< Byte > > ByteArray
存储 8位有符号整数的数组类型
定义 NBT_Type.hpp:60
NBT_Array< std::vector< Int > > IntArray
存储32位有符号整数的数组类型
定义 NBT_Type.hpp:61
NBT_Array< std::vector< Long > > LongArray
存储64位有符号整数的数组类型
定义 NBT_Type.hpp:62
std::conditional_t<(sizeof(double)==sizeof(Double_Raw)), double, Double_Raw > Double
双精度浮点类型
定义 NBT_Type.hpp:57
int32_t Int
32位有符号整数
定义 NBT_Type.hpp:51
提示性实现类(鸭子类型),仅用于模板通过性验证与用户接口提示
定义 NBT_Visitor.hpp:35
检查类型是否符合 NBT 访问器(Visitor)的接口要求
定义 NBT_Visitor.hpp:200

详细描述

检查类型是否符合 NBT 访问器(Visitor)的接口要求

模板参数
T待检查的类型
注解
该概念要求类型 T 实现 NBT_Visitor 类中定义的所有公共成员函数(包括数值/数组/字符串访问、 List/Compound 相关回调、错误处理等)。满足此概念的类型可作为 NBT_Scanner::ScanNBT 的访问器参数。
参见
NBT_Visitor 提示性实现类,展示了完整的接口原型。