#pragma once #include #include #include #include #include #include #include "../detail/basic_types.hpp" namespace lsp::transform { /// 转换错误异常类 class ConversionError : public std::runtime_error { public: explicit ConversionError(const std::string& message) : std::runtime_error("LSP Conversion Error: " + message) {} }; /// 类型特征:LSP 基本类型判断 template inline constexpr bool is_lsp_basic_type_v = std::is_same_v || std::is_same_v || std::is_same_v || std::is_same_v || std::is_same_v || std::is_same_v; /// 类型特征:LSP 容器类型判断 template inline constexpr bool is_lsp_container_type_v = std::is_same_v || std::is_same_v || std::is_same_v; /// 类型特征:检测 vector template struct is_vector : std::false_type { }; template struct is_vector> : std::true_type { }; template inline constexpr bool is_vector_v = is_vector::value; /// 类型特征:检测 map template struct is_map : std::false_type { }; template struct is_map> : std::true_type { }; template inline constexpr bool is_map_v = is_map::value; /// 类型特征:检测 optional template struct is_optional : std::false_type { }; template struct is_optional> : std::true_type { }; template inline constexpr bool is_optional_v = is_optional::value; /// 类型特征:检测 variant template struct is_variant : std::false_type { }; template struct is_variant> : std::true_type { }; template inline constexpr bool is_variant_v = is_variant::value; /// 类型特征:用户自定义 struct 判断 template inline constexpr bool is_user_struct_v = std::is_class_v && !std::is_pointer_v && !std::is_same_v && !std::is_same_v && !is_lsp_basic_type_v && !is_lsp_container_type_v && !is_vector_v && !is_map_v && !is_optional_v && !is_variant_v; }