#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) { return wrap_function(std::function(f)); } template game::hks::cclosure* convert_function(F f); }