tie¶
improved version of std::tie
std::tie() does not work well with sol::function’s sol::function_result returns. Use sol::tie instead. Because they’re both named tie, you’ll need to be explicit when you use sol’s by naming it with the namespace (sol::tie), even with a using namespace sol;. Here’s an example:
1#define SOL_ALL_SAFETIES_ON 1
2#include <sol/sol.hpp>
3
4
5int main(int, char*[]) {
6
7 const auto& code = R"(
8 bark_power = 11;
9
10 function woof ( bark_energy )
11 return (bark_energy * (bark_power / 4))
12 end
13)";
14
15 sol::state lua;
16
17 lua.script(code);
18
19 sol::function woof = lua["woof"];
20 double numwoof = woof(20);
21 SOL_ASSERT(numwoof == 55.0);
22
23 lua.script("function f () return 10, 11, 12 end");
24
25 sol::function f = lua["f"];
26 std::tuple<int, int, int> abc = f();
27 SOL_ASSERT(std::get<0>(abc) == 10);
28 SOL_ASSERT(std::get<1>(abc) == 11);
29 SOL_ASSERT(std::get<2>(abc) == 12);
30 // or
31 int a, b, c;
32 sol::tie(a, b, c) = f();
33 SOL_ASSERT(a == 10);
34 SOL_ASSERT(b == 11);
35 SOL_ASSERT(c == 12);
36
37 return 0;
38}