17 #ifndef OPENKALMAN_LIBRARYWRAPPER_HPP 18 #define OPENKALMAN_LIBRARYWRAPPER_HPP 25 template<indexible NestedObject, indexible LibraryObject>
27 template<
typename NestedObject,
typename LibraryObject>
29 struct LibraryWrapper : AdapterBase<LibraryWrapper<NestedObject, LibraryObject>, NestedObject, LibraryObject>
33 using Base = AdapterBase<LibraryWrapper, NestedObject, LibraryObject>;
44 template<indexible Arg> requires
45 (std::assignable_from<std::add_lvalue_reference_t<NestedObject>, Arg&&> or
46 std::assignable_from<std::add_lvalue_reference_t<NestedObject>, decltype(to_native_matrix<NestedObject>(std::declval<Arg&&>()))>)
48 template<
typename Arg, std::enable_if_t<
49 (std::is_assignable_v<std::add_lvalue_reference_t<NestedObject>, Arg&&> or
50 std::is_assignable_v<std::add_lvalue_reference_t<NestedObject>, decltype(to_native_matrix<NestedObject>(std::declval<Arg&&>()))>),
int> = 0>
55 if constexpr (std::assignable_from<std::add_lvalue_reference_t<NestedObject>, Arg&&>)
57 if constexpr (std::is_assignable_v<std::add_lvalue_reference_t<NestedObject>, Arg&&>)
61 Base::operator=(to_native_matrix<NestedObject>(std::forward<Arg>(arg)));
72 constexpr
operator const NestedObject& ()
const & {
return this->
nested_object(); }
75 constexpr
operator NestedObject&& () && {
return std::move(*this).nested_object(); }
78 constexpr
operator const NestedObject&& ()
const && {
return std::move(*this).nested_object(); }
86 #endif //OPENKALMAN_LIBRARYWRAPPER_HPP constexpr NestedObject & nested_object() &
Get the nested object.
Definition: AdapterBase.hpp:97
constexpr AdapterBase & operator=(Arg &&arg)
Assign from another compatible indexible object.
Definition: AdapterBase.hpp:82
Definition: forward-class-declarations.hpp:580
Definition: basics.hpp:48