#define SOL_ALL_SAFETIES_ON 1 #include #include int main() { std::cout << "=== override-able member functions ===" << std::endl; struct thingy { sol::function paint; thingy(sol::this_state L) : paint(sol::make_reference( L.lua_state(), &thingy::default_paint)) { } void default_paint() { std::cout << "p" << std::endl; } }; sol::state lua; lua.open_libraries(sol::lib::base); lua.new_usertype("thingy", sol::constructors(), "paint", &thingy::paint); sol::string_view code = R"( obj = thingy.new() obj:paint() obj.paint = function (self) print("g") end obj:paint() function obj:paint () print("s") end obj:paint() )"; lua.safe_script(code); std::cout << std::endl; return 0; }