diff options
Diffstat (limited to '3rdparty/sol2/docs/source/api/var.rst')
-rw-r--r-- | 3rdparty/sol2/docs/source/api/var.rst | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/3rdparty/sol2/docs/source/api/var.rst b/3rdparty/sol2/docs/source/api/var.rst new file mode 100644 index 00000000000..9e9bcec57d9 --- /dev/null +++ b/3rdparty/sol2/docs/source/api/var.rst @@ -0,0 +1,49 @@ +var +=== +For hooking up static / global variables to Lua usertypes +--------------------------------------------------------- + +The sole purpose of this tagging type is to work with :doc:`usertypes<usertype>` to provide ``my_class.my_static_var`` access, and to also provide reference-based access as well. + +.. code-block:: cpp + + #include <sol.hpp> + + struct test { + static int muh_variable; + }; + int test::muh_variable = 25; + + + int main () { + sol::state lua; + lua.open_libraries(); + lua.new_usertype<test>("test", + "direct", sol::var(2), + "global", sol::var(test::muh_variable), + "ref_global", sol::var(std::ref(test::muh_variable)) + ); + + int direct_value = lua["test"]["direct"]; + // direct_value == 2 + + int global = lua["test"]["global"]; + // global == 25 + int global2 = lua["test"]["ref_global"]; + // global2 == 25 + + test::muh_variable = 542; + + global = lua["test"]["global"]; + // global == 25 + // global is its own memory: was passed by value + + global2 = lua["test"]["ref_global"]; + // global2 == 542 + // global2 was passed through std::ref + // global2 holds a reference to muh_variable + // if muh_variable goes out of scope or is deleted + // problems could arise, so be careful! + + return 0; + } |