2019-05-22 07:17:31 +08:00
|
|
|
#define SOL_ALL_SAFETIES_ON 1
|
2018-09-28 13:27:38 +08:00
|
|
|
#include <sol/sol.hpp>
|
2018-02-11 05:24:17 +08:00
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
std::cout << "=== override-able member functions ===" << std::endl;
|
|
|
|
|
|
|
|
struct thingy {
|
|
|
|
sol::function paint;
|
|
|
|
|
|
|
|
thingy(sol::this_state L) : paint(sol::make_reference<sol::function>(L.lua_state(), &thingy::default_paint)) {
|
|
|
|
}
|
|
|
|
|
|
|
|
void default_paint() {
|
|
|
|
std::cout << "p" << std::endl;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
sol::state lua;
|
|
|
|
lua.open_libraries(sol::lib::base);
|
|
|
|
|
2021-03-06 14:03:23 +08:00
|
|
|
lua.new_usertype<thingy>("thingy", sol::constructors<thingy(sol::this_state)>(), "paint", &thingy::paint);
|
2018-02-11 05:24:17 +08:00
|
|
|
|
|
|
|
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;
|
|
|
|
}
|