summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/sol2/docs/source/api/property.rst
blob: e3ee02e2353a8c7fb0be9d198cf811216b3246e6 (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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
property
========

.. code-block:: cpp
	
	template <typename Read, typename Write>
	decltype(auto) property ( Read&& read_function, Write&& write_function );
	template <typename Read>
	decltype(auto) property ( Read&& read_function );
	template <typename Write>
	decltype(auto) property ( Write&& write_function );

These set of functions create a type which allows a setter and getter pair (or a single getter, or a single setter) to be used to create a variable that is either read-write, read-only, or write-only. When used during :doc:`usertype<usertype>` construction, it will create a variable that uses the setter/getter member function specified.

.. code-block:: cpp
	:caption: player.hpp
	:linenos:

	class Player {
	public:
		int get_hp() const {
			return hp;
		}

		void set_hp( int value ) {
			hp = value;
		}

		int get_max_hp() const {
			return hp;
		}

		void set_max_hp( int value ) {
			maxhp = value;
		}

	private:
		int hp = 50;
		int maxHp = 50;
	}

.. code-block:: cpp
	:caption: game.cpp
	:linenos:

	sol::state lua;
	lua.open_libraries(sol::lib::base);

	lua.set("theplayer", Player());

	// Yes, you can register after you set a value and it will
	// connect up the usertype automatically
	lua.new_usertype<Player>( "Player",
		"hp", sol::property(&Player::get_hp, &Player::set_hp),
		"maxHp", sol::property(&Player::get_max_hp, &Player::set_max_hp)
	);


.. code-block:: lua
	:caption: game-snippet.lua

	-- variable syntax, calls functions
	theplayer.hp = 20
	print(theplayer.hp)