diff --git a/src/Utils/Convert.h b/src/Utils/Convert.h index c3dcb06b..c4b659c3 100644 --- a/src/Utils/Convert.h +++ b/src/Utils/Convert.h @@ -1,5 +1,4 @@ #pragma once -#include "API/APIHelper.h" #include "Utils/Using.h" #include "boost/pfr.hpp" #include "fmt/format.h" @@ -26,7 +25,8 @@ namespace IConvertCppToScriptX { // 基础模板 template struct ToScriptType { - static_assert(sizeof(T) == 0, "Unsupported type conversion"); + // static_assert(sizeof(T) == 0, "Unsupported type conversion"); + using Type = void; }; // 特化类型 @@ -107,15 +107,15 @@ Local DoScriptTypeConvert(const T& value) { } } template -constexpr bool IsScriptTypeConvertible = requires(const T& v) { DoScriptTypeConvert(v); }; +constexpr bool IsScriptTypeConvertible = !std::is_same_v::Type, void>; template -Local DoReflectConvert(const T& value, Local& res) { +void DoReflectConvert(const T& value, Local& res) { boost::pfr::for_each_field(value, [&](auto& field, std::size_t index) { - if constexpr (IsScriptTypeConvertible>) { + if constexpr (IsScriptTypeConvertible>) { res.set(boost::pfr::names_as_array>()[index], DoScriptTypeConvert(field)); - } else if constexpr (IsReflectable) { + } else if constexpr (IsReflectable>) { Local obj = Object::newObject(); - DoScriptTypeConvert(obj); + DoReflectConvert(field, obj); res.set(boost::pfr::names_as_array>()[index], obj); } });