#pragma once namespace ui_scripting { template auto wrap_function(const std::function& f, std::index_sequence) { return [f](const function_arguments& args) { f(args[I]...); return arguments{{}}; }; } template auto wrap_function(const std::function& f, std::index_sequence) { return [f](const function_arguments& args) { return f(args[I]...); }; } template auto wrap_function(const std::function& f, std::index_sequence) { return [f](const function_arguments& args) { return arguments{f(args[I]...)}; }; } template auto wrap_function(const std::function& f) { return wrap_function(f, std::index_sequence_for{}); } template auto wrap_function(F f) { std::function f_ = f; return wrap_function(f_); } template game::hks::cclosure* convert_function(F f); }