From dc2493e7525bb7633f697ef10f72b72b46222249 Mon Sep 17 00:00:00 2001 From: Andy Belle-Isle Date: Fri, 30 Aug 2019 00:45:36 -0400 Subject: Forget what I said, I just need to change git attributes to mark for vendor --- .../examples/source/overloading_with_members.cpp | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 lib/sol2/examples/source/overloading_with_members.cpp (limited to 'lib/sol2/examples/source/overloading_with_members.cpp') diff --git a/lib/sol2/examples/source/overloading_with_members.cpp b/lib/sol2/examples/source/overloading_with_members.cpp new file mode 100644 index 0000000..92f1260 --- /dev/null +++ b/lib/sol2/examples/source/overloading_with_members.cpp @@ -0,0 +1,66 @@ +#define SOL_ALL_SAFETIES_ON 1 +#include + +#include "assert.hpp" + +#include + +struct pup { + int barks = 0; + + void bark () { + ++barks; // bark! + } + + bool is_cute () const { + return true; + } +}; + +void ultra_bark( pup& p, int barks) { + for (; barks --> 0;) p.bark(); +} + +void picky_bark( pup& p, std::string s) { + if ( s == "bark" ) + p.bark(); +} + +int main () { + std::cout << "=== overloading with members ===" << std::endl; + + sol::state lua; + lua.open_libraries(sol::lib::base); + + lua.set_function( "bark", sol::overload( + ultra_bark, + []() { return "the bark from nowhere"; } + ) ); + + lua.new_usertype( "pup", + // regular function + "is_cute", &pup::is_cute, + // overloaded function + "bark", sol::overload( &pup::bark, &picky_bark ) + ); + + const auto& code = R"( + barker = pup.new() + print(barker:is_cute()) + barker:bark() -- calls member function pup::bark + barker:bark("meow") -- picky_bark, no bark + barker:bark("bark") -- picky_bark, bark + + bark(barker, 20) -- calls ultra_bark + print(bark()) -- calls lambda which returns that string + )"; + + lua.script(code); + + pup& barker = lua["barker"]; + std::cout << barker.barks << std::endl; + c_assert(barker.barks == 22); + + std::cout << std::endl; + return 0; +} \ No newline at end of file -- cgit v1.2.3