summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/sol2/docs/source/api/var.rst
blob: 9e9bcec57d9fac1736c19840125b4018794021a3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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;
	}