state& new_userdata(const std::string& name, Args&&... args) { constructors<types<CTor...>> ctor; classes.emplace_back(std::make_shared<userdata<Class>>(name, ctor, std::forward<Args>(args)...)); auto&& ptr = classes.back(); auto udata = std::static_pointer_cast<userdata<Class>>(ptr); global.set_userdata(*udata); return *this; }
state& new_userdata(const std::string& name, constructors<CArgs...> ctor, Args&&... args) { userdata<Class> udata(name, ctor, std::forward<Args>(args)...); global.set_userdata(udata); return *this; }
state& set_userdata(userdata<T>& user) { global.set_userdata(user); return *this; }
state& set_userdata(Key&& key, userdata<T>& user) { global.set_userdata(std::forward<Key>(key), user); return *this; }