2016-02-25 11:38:05 +08:00
## Sol 2
2014-08-06 07:10:07 +08:00
2016-02-25 13:08:42 +08:00
[![Build Status ](https://travis-ci.org/ThePhD/sol2.svg?branch=develop )](https://travis-ci.org/ThePhD/sol2)
2014-08-06 07:10:07 +08:00
2016-02-06 13:14:18 +08:00
Sol is a C++ library binding to Lua. It currently supports all Lua versions 5.1+ (LuaJIT 2.x included). Sol aims to be easy to use and easy to add to a project.
2016-02-11 00:36:00 +08:00
The library is header-only for easy integration with projects.
2014-08-06 07:10:07 +08:00
## Sneak Peek
```cpp
#include <sol.hpp>
#include <cassert>
int main() {
sol::state lua;
int x = 0;
lua.set_function("beep", [& x]{ ++x; });
lua.script("beep()");
assert(x == 1);
}
```
```cpp
#include <sol.hpp>
#include <cassert>
struct vars {
int boop = 0;
};
int main() {
sol::state lua;
2015-07-22 07:26:35 +08:00
lua.new_usertype< vars > ("vars", "boop", &vars::boop);
2014-09-07 13:11:00 +08:00
lua.script("beep = vars.new()\n"
2014-08-06 07:10:07 +08:00
"beep.boop = 1");
assert(lua.get< vars > ("beep").boop == 1);
}
```
More examples are given in the examples directory.
2015-07-22 07:49:06 +08:00
## Creating a single header
For maximum ease of use, a script called `single.py` is provided. You can run this script to create a single file version of the library so you can only include that part of it. Check `single.py --help` for more info.
2014-08-06 07:10:07 +08:00
## Features
2016-02-25 11:38:05 +08:00
- [Fast ](http://satoren.github.io/lua_binding_benchmark/ ).
- Supports retrieval and setting of multiple types including `std::string` and `std::map/unordered_map` .
2014-08-06 07:10:07 +08:00
- Lambda, function, and member function bindings are supported.
- Intermediate type for checking if a variable exists.
2016-02-25 11:38:05 +08:00
- Simple API that completely abstracts away the C stack API, including `protected_function` with the ability to use an error-handling function.
2016-02-06 13:14:18 +08:00
- `operator[]` -style manipulation of tables
- C++ type representations in lua userdata as `usertype` s with guaranteed cleanup
2016-02-25 11:38:05 +08:00
- Overloaded function calls: `my_function(1); my_function("Hello")` in the same lua script route to different function calls based on parameters
- Support for tables, nested tables, table iteration with `table.for_each` .
2014-08-06 07:10:07 +08:00
## Supported Compilers
2016-02-06 13:14:18 +08:00
Sol makes use of C++11/14 features. GCC 4.7 and Clang 3.3 or higher should be able to compile without problems. However, the
2014-08-06 07:10:07 +08:00
officially supported compilers are:
2016-02-25 11:38:05 +08:00
- GCC 4.8.0+
- Clang 3.4+
- Visual Studio 2015 Community (Visual C++ 14.0) and above
2014-08-06 07:10:07 +08:00
## Caveats
Due to how this library is used compared to the C API, the Lua Stack is completely abstracted away. Not only that, but all
2016-02-25 11:38:05 +08:00
Lua errors are thrown as exceptions instead: if you don't want to deal with errors thrown by at_panic, you can set your own panic function
or use the `protected_function` API. This allows you to handle the errors gracefully without being forced to exit.
2014-08-06 07:10:07 +08:00
It should be noted that the library itself depends on `lua.hpp` to be found by your compiler. It uses angle brackets, e.g.
`#include <lua.hpp>` .
## License
Sol is distributed with an MIT License. You can see LICENSE.txt for more info.