Sol 2.17
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. The library is header-only for easy integration with projects.
Find it here. A run-through kind of tutorial is here! 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 as well.
Sneak Peek
#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); }
#include <sol.hpp> #include <cassert> struct vars { int boop = 0; }; int main() { sol::state lua; lua.new_usertype<vars>("vars", "boop", &vars::boop); lua.script("beep = vars.new()\n" "beep.boop = 1"); assert(lua.get<vars>("beep").boop == 1); }
More examples are given in the examples directory.
Presentations
"A Sun For the Moon - A Zero-Overhead Lua Abstraction using C++"
ThePhD
Lua Workshop 2016 - Mashape, San Francisco, CA
Deck
Creating a single header
You can grab a single header out of the library here. 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.
Features
- Fastest in the land (see: sol bar in graph).
- Supports retrieval and setting of multiple types including
std::stringandstd::map/unordered_map. - Lambda, function, and member function bindings are supported.
- Intermediate type for checking if a variable exists.
- Simple API that completely abstracts away the C stack API, including
protected_functionwith the ability to use an error-handling function. operator[]-style manipulation of tables- C++ type representations in lua userdata as
usertypes 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!
- 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/begin()andend()iterators.
Supported Compilers
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:
- GCC 5.x.x+
- Clang 3.6.x+
- Visual Studio 2015 Community (Visual C++ 14.0)+
Please make sure you use the -std=c++1y, -std=c++14, -std=c++1z, -std=c++17 or better standard flags
(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, with the flag -std=c++14 or -std=c++1y.
License
Sol is distributed with an MIT License. You can see LICENSE.txt for more info.