var¶
For hooking up static / global variables to Lua usertypes
The sole purpose of this tagging type is to work with usertypes to provide my_class.my_static_var
access, and to also provide reference-based access as well.
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 | #define SOL_ALL_SAFETIES_ON 1
#include <sol/sol.hpp>
#include "assert.hpp"
#include <iostream>
struct test {
static int number;
};
int test::number = 25;
int main() {
sol::state lua;
lua.open_libraries();
lua.new_usertype<test>("test",
"direct", sol::var(2),
"number", sol::var(test::number),
"ref_number", sol::var(std::ref(test::number))
);
int direct_value = lua["test"]["direct"];
c_assert(direct_value == 2);
int number = lua["test"]["number"];
c_assert(number == 25);
int ref_number = lua["test"]["ref_number"];
c_assert(ref_number == 25);
test::number = 542;
// number is its own memory: was passed by value
// So does not change
int number_again = lua["test"]["number"];
c_assert(number_again == 25);
// ref_number is just test::number
// passed through std::ref
// so, it holds a reference
// which can be updated
int ref_number_again = lua["test"]["ref_number"];
c_assert(ref_number_again == 542);
// be careful about referencing local variables,
// if they go out of scope but are still reference
// you'll suffer dangling reference bugs!
return 0;
}
|