From bd3fe0cac583739bc0d7c4b5c8f301bb350abca0 Mon Sep 17 00:00:00 2001 From: Andy Belle-Isle Date: Fri, 30 Aug 2019 00:19:31 -0400 Subject: Renamed lib to deps so github will ignore it for language stats --- deps/sol2/docs/source/api/as_table.rst | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 deps/sol2/docs/source/api/as_table.rst (limited to 'deps/sol2/docs/source/api/as_table.rst') diff --git a/deps/sol2/docs/source/api/as_table.rst b/deps/sol2/docs/source/api/as_table.rst new file mode 100644 index 0000000..28c0636 --- /dev/null +++ b/deps/sol2/docs/source/api/as_table.rst @@ -0,0 +1,33 @@ +as_table +=========== +*make sure an object is pushed as a table* + + +.. code-block:: cpp + + template + as_table_t { + T& value() &; + const T& value() & const; + T&& value() &&; + }; + + template + as_table_t as_function ( T&& container ); + +This function serves the purpose of ensuring that an object is pushed -- if possible -- like a table into Lua. The container passed here can be a pointer, a reference, a ``std::reference_wrapper`` around a container, or just a plain container value. It must have a begin/end function, and if it has a ``std::pair`` as its ``value_type``, it will be pushed as a dictionary. Otherwise, it's pushed as a sequence. + +.. literalinclude:: ../../../examples/source/docs/as_table_ipairs.cpp + :linenos: + +Note that any caveats with Lua tables apply the moment it is serialized, and the data cannot be gotten out back out in C++ as a C++ type. You can deserialize the Lua table into something explicitly using the ``sol::as_table_t`` marker for your get and conversion operations using sol. At that point, the returned type is deserialized **from** a table, meaning you cannot reference any kind of C++ data directly as you do with regular userdata/usertypes. *All C++ type information is lost upon serialization into Lua.* + +If you need this functionality with a member variable, use a :doc:`property on a getter function` that returns the result of ``sol::as_table``. + +This marker does NOT apply to :doc:`usertypes`. + +You can also use this to nest types and retrieve tables within tables as shown by this example. + +.. literalinclude:: ../../../examples/source/containers_as_table.cpp + :linenos: + :lines: 1-8,31-60,62-68,70- -- cgit v1.2.3