23 #ifndef LUAVALUECASTS_H
24 #define LUAVALUECASTS_H
102 typename std::enable_if<std::is_enum<T>::value,
int>::type
106 typename std::enable_if<std::is_enum<T>::value,
bool>::type
111 typename std::enable_if<std::is_base_of<LuaObject, typename T::element_type>::value,
int>::type
117 typename std::enable_if<std::is_base_of<LuaObject, T>::value,
bool>::type
121 template<
typename Ret,
typename... Args>
124 template<
typename... Args>
125 bool luavalue_cast(
int index, std::function<
void(Args...)>& func);
127 template<
typename Ret,
typename... Args>
128 typename std::enable_if<!std::is_void<Ret>::value,
bool>::type
153 template<
class K,
class V>
156 template<
class K,
class V>
160 template<
typename... Args>
163 template<
typename... Args>
178 typename std::enable_if<std::is_enum<T>::value,
bool>::type
182 myenum =
static_cast<T
>(i);
189 typename std::enable_if<std::is_base_of<LuaObject, typename T::element_type>::value,
int>::type
199 typename std::enable_if<std::is_base_of<LuaObject, T>::value,
bool>::type
205 ptr = obj->dynamic_self_cast<T>();
211 template<
typename Ret,
typename... Args>
222 template<
typename... Args>
229 func = [=](Args... args) {
240 throw LuaException(
"attempt to call an expired lua function from C++,"
241 "did you forget to hold a reference for that function?", 0);
251 func = std::function<void(Args...)>();
257 template<
typename Ret,
typename... Args>
258 typename std::enable_if<!std::is_void<Ret>::value,
bool>::type
265 func = [=](Args... args) -> Ret {
273 throw LuaException(
"a function from lua didn't retrieve the expected number of results", 0);
277 throw LuaException(
"attempt to call an expired lua function from C++,"
278 "did you forget to hold a reference for that function?", 0);
289 func = std::function<Ret(Args...)>();
299 for (
const T& v : list) {
312 while (
g_lua.
next(index < 0 ? index - 1 : index)) {
315 list.push_back(value);
327 for (
const T& v : vec) {
340 while (
g_lua.
next(index < 0 ? index - 1 : index)) {
343 vec.push_back(value);
355 for (
const T& v : vec) {
368 while (
g_lua.
next(index < 0 ? index - 1 : index)) {
371 vec.push_back(value);
379 template<
class K,
class V>
383 for (
auto& it : map) {
391 template<
class K,
class V>
396 while (
g_lua.
next(index < 0 ? index - 1 : index)) {
411 template<
typename Tuple>
412 static void call(
const Tuple& tuple) {
421 template<
typename Tuple>
422 static void call(
const Tuple& ) { }
425 template<
typename... Args>
434 template<
typename Tuple>
435 static void call(
const Tuple& tuple) {
443 template<
typename Tuple>
444 static void call(
const Tuple& ) { }
447 template<
typename... Args>
450 return sizeof...(Args);