2#ifndef LIBSBX_SCRIPTING_MANAGED_TYPE_HPP_
3#define LIBSBX_SCRIPTING_MANAGED_TYPE_HPP_
5#include <libsbx/scripting/managed/core.hpp>
6#include <libsbx/scripting/managed/string.hpp>
7#include <libsbx/scripting/managed/object.hpp>
9namespace sbx::scripting::managed {
13 friend class host_instance;
25 auto get_full_name()
const ->
string;
27 auto get_base_type() ->
type&;
29 auto get_type_id()
const -> type_id;
31 auto operator==(
const type& other)
const -> bool;
33 operator bool()
const;
35 template<
typename... Args>
36 auto create_instance(Args&&... args)
const ->
object {
37 constexpr auto argument_count =
sizeof...(args);
39 auto result =
object{};
41 if constexpr (argument_count > 0) {
42 const auto arguments = std::array<void*, argument_count>{};
43 auto argument_types = std::array<managed_type, argument_count>{};
45 add_to_array<Args...>(arguments, argument_types, std::forward<Args>(args)..., std::make_index_sequence<argument_count>{});
47 result = _create_instance_internal(arguments.data(), argument_types.data(), argument_count);
49 result = _create_instance_internal(
nullptr,
nullptr, 0);
57 auto _create_instance_internal(
const void** parameters,
const managed_type* parameter_types, std::size_t length)
const ->
object;
60 type* _base_type =
nullptr;
61 type* _element_type =
nullptr;
69 operator type&()
const;
Definition: assembly.hpp:63
Definition: assembly.hpp:27
Definition: attribute.hpp:11
Definition: field_info.hpp:14
Definition: method_info.hpp:14
Definition: object.hpp:89
Definition: property_info.hpp:14
Definition: string.hpp:11