| 10 | |
| 11 | |
| 12 | int main() { |
| 13 | sol::state lua; |
| 14 | lua.open_libraries(); |
| 15 | lua.new_usertype<test>("test", |
| 16 | "direct", |
| 17 | sol::var(2), |
| 18 | "number", |
| 19 | sol::var(test::number), |
| 20 | "ref_number", |
| 21 | sol::var(std::ref(test::number))); |
| 22 | |
| 23 | int direct_value = lua["test"]["direct"]; |
| 24 | SOL_ASSERT(direct_value == 2); |
| 25 | |
| 26 | int number = lua["test"]["number"]; |
| 27 | SOL_ASSERT(number == 25); |
| 28 | int ref_number = lua["test"]["ref_number"]; |
| 29 | SOL_ASSERT(ref_number == 25); |
| 30 | |
| 31 | test::number = 542; |
| 32 | |
| 33 | // number is its own memory: was passed by value |
| 34 | // So does not change |
| 35 | int number_again = lua["test"]["number"]; |
| 36 | SOL_ASSERT(number_again == 25); |
| 37 | |
| 38 | // ref_number is just test::number |
| 39 | // passed through std::ref |
| 40 | // so, it holds a reference |
| 41 | // which can be updated |
| 42 | int ref_number_again = lua["test"]["ref_number"]; |
| 43 | SOL_ASSERT(ref_number_again == 542); |
| 44 | // be careful about referencing local variables, |
| 45 | // if they go out of scope but are still reference |
| 46 | // you'll suffer dangling reference bugs! |
| 47 | |
| 48 | return 0; |
| 49 | } |
nothing calls this directly
no test coverage detected