ReflectedMethodParameterWrapper( const Variant& variant, const IDefinitionManager & definitionManager ) { ObjectHandle handle; value = variant.tryCast<ObjectHandle>( handle ) ? *reflectedCast< Type >(handle.data(), handle.type(), definitionManager ) : variant.cast<Type>(); }
Variant invoke(const ObjectHandle& object, const IDefinitionManager& definitionManager, const ReflectedMethodParameters& parameters) override { auto pointer = reflectedCast<ClassType>(object.data(), object.type(), definitionManager); TF_ASSERT(pointer != nullptr); return invokeMember( pointer, method_, definitionManager, parameters, std::index_sequence_for<Args...>{} ); }
ReflectedMethodParameterWrapper(const Variant& variant, const IDefinitionManager& definitionManager) { if (variant.canCast<ObjectHandle>()) { ObjectHandle handle = variant.cast<ObjectHandle>(); pointer_ = reflectedCast<Type>(handle.data(), handle.type(), definitionManager); } else { pointer_ = &const_cast<Variant&>(variant).cast<Type&>(); } }