diff options
author | Andy <drumsetmonkey@gmail.com> | 2019-08-29 13:07:45 -0400 |
---|---|---|
committer | Andy <drumsetmonkey@gmail.com> | 2019-08-29 13:07:45 -0400 |
commit | 4ac4b280abf2ffa28caa5a532353115a3033444f (patch) | |
tree | 2a13d658bb454360b2faf401244bb0321d3460d4 /lib/sol2/examples/source/overloading_with_members.cpp | |
parent | e9758416b18b27a65337c28d9641afc0ee89b34b (diff) | |
parent | 7a46fa2dd3dad3f038bf8e7339bc67abca428ae6 (diff) |
Started creating scripting library/namespace and added sol2 for interfacing
Diffstat (limited to 'lib/sol2/examples/source/overloading_with_members.cpp')
-rw-r--r-- | lib/sol2/examples/source/overloading_with_members.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
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 <sol/sol.hpp>
+
+#include "assert.hpp"
+
+#include <iostream>
+
+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>( "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 |