| 166 | }; |
| 167 | |
| 168 | static void TestCallByReference(LuaCpp::State &lua) { |
| 169 | lua["XXX"].SetClass<XXX>(); |
| 170 | lua["XXX"].AddClassMembers<XXX>("x", &XXX::x); |
| 171 | |
| 172 | lua["YYY"].SetClass<YYY>(); |
| 173 | lua["YYY"].AddClassMembers<YYY>("y", &YYY::y); |
| 174 | |
| 175 | lua(R"( |
| 176 | function exchange_value(x, y) |
| 177 | local tmp = x:x() |
| 178 | x:set_x(y:y()) |
| 179 | y:set_y(tmp) |
| 180 | end |
| 181 | )"); |
| 182 | |
| 183 | XXX x = { 1 }; |
| 184 | YYY y = { 2 }; |
| 185 | lua["exchange_value"](x, y); // call by lvalue reference |
| 186 | assert(x.x == 2 && y.y == 1); |
| 187 | |
| 188 | lua["exchange_value"](x, YYY{ 3 }); // call by lvaue / rvalue reference |
| 189 | assert(x.x == 3); |
| 190 | } |
| 191 | |
| 192 | static void TestVec3(LuaCpp::State &lua) { |
| 193 | auto luaVec3 = lua["Vec3"]; |