template<typename T>
requires(
T visitor,
size_t nbt_list_length,
size_t nbt_list_index,
)
{
{
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())>;
{
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())>;
{
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 实现 NBT_Visitor 类中定义的所有公共成员函数(包括数值/数组/字符串访问、 List/Compound 相关回调、错误处理等)。满足此概念的类型可作为 NBT_Scanner::ScanNBT 的访问器参数。
- 参见
- NBT_Visitor 提示性实现类,展示了完整的接口原型。