Foreign object wrapper.
using value_type = Aspect< T >copy() -> value_type *clear() -> voidrelease() -> voidset(value_type * rhs) -> voidget() const -> const T *get() -> T *ptr() -> value_type *
Aspect that extends Guile-unaware classes and provides a pointer to the corresponding wrapper object.
Wrapper/aspect technique is described in Guile manual. In our implementation it boils down to the following two rules.
wrapper() const -> const wrapper_type *wrapper() -> wrapper_type *wrapper(wrapper_type * rhs) -> void~Aspect()Aspect(T && rhs)Aspect(const T & rhs)template <class T> make_object(SCM type, Aspect< T > * ptr) -> SCMtemplate <class T> to_wrapper(SCM object) -> Wrapper< T > *make_wrapper(const std::any & any) -> Wrapper< std::any > *template <class T> make_object(SCM type, Wrapper< T > * wrapper) -> SCMmake_wrapper(std::any && any) -> Wrapper< std::any > *template <class T> make_wrapper(std::unique_ptr< T > && ptr) -> Wrapper< std::unique_ptr< T > > *template <class T> make_wrapper() -> Wrapper< T > *