2017-08-07 00:20:32 +08:00
## Sol 2.18
2014-08-06 07:10:07 +08:00
2016-10-21 18:40:00 +08:00
[![Join the chat at https://gitter.im/chat-sol2/Lobby ](https://badges.gitter.im/chat-sol2/Lobby.svg )](https://gitter.im/chat-sol2/Lobby?utm_source=badge& utm_medium=badge& utm_campaign=pr-badge& utm_content=badge)
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)
2016-08-07 06:57:22 +08:00
[![Documentation Status ](https://readthedocs.org/projects/sol2/badge/?version=latest )](http://sol2.readthedocs.io/en/latest/?badge=latest)
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
2016-03-22 00:26:07 +08:00
## Documentation
2016-07-16 17:04:38 +08:00
Find it [here ](http://sol2.rtfd.io/ ). A run-through kind of tutorial is [here ](http://sol2.readthedocs.io/en/latest/tutorial/all-the-things.html )! The API documentation goes over most cases (particularly, the "api/usertype" and "api/proxy" and "api/function" sections) that should still get you off your feet and going, and there's an examples directory [here ](https://github.com/ThePhD/sol2/tree/develop/examples ) as well.
2016-03-22 00:26:07 +08:00
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);
}
```
2017-10-20 10:23:24 +08:00
More examples are given in the examples directory [here ](https://github.com/ThePhD/sol2/tree/develop/examples ).
2014-08-06 07:10:07 +08:00
2016-10-16 06:41:54 +08:00
## Presentations
2016-11-05 07:41:16 +08:00
"A Sun For the Moon - A Zero-Overhead Lua Abstraction using C++"
ThePhD
Lua Workshop 2016 - Mashape, San Francisco, CA
2016-10-16 06:41:54 +08:00
[Deck ](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/ThePhD%20-%20No%20Overhead%20C%20Abstraction%20-%202016.10.14.pdf )
2015-07-22 07:49:06 +08:00
## Creating a single header
2016-07-29 22:35:24 +08:00
You can grab a single header out of the library [here ](https://github.com/ThePhD/sol2/tree/develop/single/sol ). For stable version, check the releases tab on github for a provided single header file for maximum ease of use. A script called `single.py` is provided in the repository if there's some bleeding edge change that hasn't been published on the releases page. 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.
2015-07-22 07:49:06 +08:00
2014-08-06 07:10:07 +08:00
## Features
2016-11-06 08:08:07 +08:00
- [Fastest in the land ](http://sol2.readthedocs.io/en/latest/benchmarks.html ) (see: sol bar in graph).
2016-02-25 11:38:05 +08:00
- 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
2016-07-29 22:35:24 +08:00
- C++ type representations in lua userdata as `usertype` s with guaranteed cleanup.
- Customization points to allow your C++ objects to be pushed and retrieved from Lua as multiple consecutive objects, or anything else you desire!
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
2016-07-29 22:35:24 +08:00
- Support for tables, nested tables, table iteration with `table.for_each` / `begin()` and `end()` iterators.
2014-08-06 07:10:07 +08:00
## Supported Compilers
2017-10-20 10:23:24 +08:00
Sol makes use of C++11 **and** C++14 features. GCC 5.x.x and Clang 3.6.x (with `-std=c++1z` and appropriate standard library)
or higher should be able to compile without problems. However, the officially supported and CI-tested compilers are:
2014-08-06 07:10:07 +08:00
2017-06-08 03:27:49 +08:00
- GCC 5.x.x+
- Clang 3.6.x+
2016-03-22 00:37:10 +08:00
- Visual Studio 2015 Community (Visual C++ 14.0)+
2014-08-06 07:10:07 +08:00
2017-10-20 10:23:24 +08:00
Please make sure you use the `-std=c++1y` , `-std=c++14` , `-std=c++1z` , `-std=c++17` or better standard flags
2017-06-08 03:27:49 +08:00
(some of these flags are the defaults in later versions of GCC 6+ and better).
Older compilers (GCC 4.9.x, Clang 3.4.x seem to be the lowest) can work with versions as late
as [v2.17.5 ](https://github.com/ThePhD/sol2/releases/tag/v2.17.5 ), with the flag `-std=c++14` or `-std=c++1y` .
2014-08-06 07:10:07 +08:00
## License
Sol is distributed with an MIT License. You can see LICENSE.txt for more info.