mirror of
https://github.com/ThePhD/sol2.git
synced 2024-03-22 13:10:44 +08:00
1d0683a53e
Implements #578
42 lines
823 B
C++
42 lines
823 B
C++
#define SOL_CHECK_ARGUMENTS 1
|
|
#include <sol.hpp>
|
|
|
|
#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);
|
|
|
|
lua.new_usertype<thingy>("thingy",
|
|
sol::constructors<thingy(sol::this_state)>(),
|
|
"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;
|
|
} |