this_state

transparent state argument for the current state

struct this_state;

This class is a transparent type that is meant to be gotten in functions to get the current lua state a bound function or usertype method is being called from. It does not actually retrieve anything from lua nor does it increment the argument count, making it “invisible” to function calls in lua and calls through std::function<...> and sol::function on this type. It can be put in any position in the argument list of a function:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#define SOL_ALL_SAFETIES_ON 1
#include <sol/sol.hpp>

#include "assert.hpp"

int main () {
	sol::state lua;
    
	lua.set_function("bark", []( sol::this_state s, int a, int b ){
		lua_State* L = s; // current state
		return a + b + lua_gettop(L);
	});
	
	lua.script("first = bark(2, 2)"); // only takes 2 arguments, NOT 3
		
	// Can be at the end, too, or in the middle: doesn't matter
	lua.set_function("bark", []( int a, int b, sol::this_state s ){
		lua_State* L = s; // current state
		return a + b + lua_gettop(L);
	});

	lua.script("second = bark(2, 2)"); // only takes 2 arguments
	int first = lua["first"];
	c_assert(first == 6);
	int second = lua["second"];
	c_assert(second == 6);

	return 0;
}