mirror of
https://github.com/ThePhD/sol2.git
synced 2024-03-22 13:10:44 +08:00
866a2973ac
That's... that's it, really. Also, there's a new warning in `sol::as_table`, because people kept trying to slap it on class bindings and that's not what it was for, damnit.
26 lines
1.1 KiB
ReStructuredText
26 lines
1.1 KiB
ReStructuredText
as_table
|
|
===========
|
|
make sure an object is pushed as a table
|
|
----------------------------------------
|
|
|
|
.. code-block:: cpp
|
|
|
|
template <typename T>
|
|
as_table_t { ... };
|
|
|
|
template <typename T>
|
|
as_table_t<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<Key, Value>`` as its ``value_type``, it will be pushed as a dictionary. Otherwise, it's pushed as a sequence.
|
|
|
|
.. code-block:: cpp
|
|
|
|
sol::state lua;
|
|
lua.open_libraries();
|
|
lua.set("my_table", sol::as_table(std::vector<int>{ 1, 2, 3, 4, 5 }));
|
|
lua.script("for k, v in ipairs(my_table) do print(k, v) assert(k == v) end");
|
|
|
|
|
|
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 without explicitly using the ``as_table_t`` marker for your get and conversion operations using Sol.
|
|
|
|
This marker does NOT apply to :doc:`usertypes<usertype>`. |