I understand with Luabind that I can expose classes and then instances of those classes can be created in lua.
module[L_state]
[
class_<Player>("Player")
.def(constructor<>())
.def("Update",&Player::Update)
];
test.lua
player = Player()
player:Update()
But what if I wanted to create that player instance in C++ because I want to call it's members in C++, but I also want to expose that same instance of player to Lua so it can still call it's functions like:
player:Update()
You can push the value onto the Lua stack via luabind:
Player p;
luabind::globals(L)["player"] = p;
a runnable example: travis-ci, source.
P.S. beware of object lifetime and ownership issues. The LuaBridge manual can be of help to plan a strategy of shared object lifetime management. + an updated LuaBind manual for the LuaBind lifetime policies.