#include "uclass.h" namespace refl { bool FieldPtr::Invoke(const std::vector& ArgsList)const{ auto Call = type->vtable.Call; if (Call) { Call(this, ArgsList); } return Call; } bool FieldPtr::Invoke(std::vector& ArgsList)const { auto Call = type->vtable.Call; if (Call) { auto params = GetParams(); int paramsSize = params.size(); int argsSize = ArgsList.size(); if (argsSize < paramsSize && flag & FIELD_METHOD_VALUE_FLAG) { auto [argsPtr, valueSize] = value.method(); if (argsSize + valueSize >= paramsSize) { for (int i = valueSize + argsSize - paramsSize; i < valueSize; i++) { ArgsList.push_back(*(argsPtr + i)); } argsSize = paramsSize; } } if (argsSize < paramsSize) { return false; } for (int i = 0; i < paramsSize; i++) { if (ArgsList[i].cls != params[i] && !ArgsList[i].ConvertTo(params[i])) { return false; } } Call(this, ArgsList); } return Call; } std::vector FieldPtr::GetParams() const { auto GetParams = type->vtable.GetParams; if (GetParams) { return GetParams(type); } return{}; } }