Back to Piccolo

as_container

engine/3rdparty/sol2-3.3.0/documentation/source/api/as_container.rst

0.0.91.4 KB
Original Source

as_container

force a type to be viewed as a container-type when serialized to Lua

.. code-block:: cpp

template <typename T>
struct as_returns_t { ... };

template <typename T>
as_returns_t<T> as_returns( T&& );

Sometimes, you have a type whose metatable you claim with a usertype metatable via :doc:usertype semantics<usertype>. But, it still has parts of it that make it behave like a container in C++: A value_type typedef, an iterator typedef, a begin, an end, and other things that satisfy the Container requirements_ or the Sequence Container requirements_ or behaves like a forward_list_.

Whatever the case is, you need it to be returned to Lua and have many of the traits and functionality described in the :doc:containers documentation<../containers>. Wrap a return type or a setter in sol::as_container( value ); to allow for a type to be treated like a container, regardless of whether sol::is_container triggers or not.

See this container example_ to see how it works.

.. _this container example: https://github.com/ThePhD/sol2/blob/develop/examples/source/container_usertype_as_container.cpp .. _Container requirements: http://en.cppreference.com/w/cpp/concept/Container .. _Sequence Container requirements: http://en.cppreference.com/w/cpp/concept/SequenceContainer .. _forward_list: http://en.cppreference.com/w/cpp/container/forward_list