// This file is distributed under the BSD License. // See "license.txt" for details. // Copyright 2009-2012, Jonathan Turner (jonathan@emptycrate.com) // Copyright 2009-2014, Jason Turner (jason@emptycrate.com) // http://www.chaiscript.com #ifndef CHAISCRIPT_BIND_FIRST_HPP_ #define CHAISCRIPT_BIND_FIRST_HPP_ #include namespace chaiscript { namespace detail { struct Placeholder { CHAISCRIPT_CONSTEXPR static std::tuple placeholder() { return std::tuple(std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4,std::placeholders::_5,std::placeholders::_6,std::placeholders::_7,std::placeholders::_8,std::placeholders::_9,std::placeholders::_10); }; }; template struct Bind_First { template static std::function bind(F f, InnerParams ... innerparams) { return Bind_First::bind(f, innerparams..., std::get(Placeholder::placeholder())); } }; template struct Bind_First<0, maxcount, Sig> { template static std::function bind(F f, InnerParams ... innerparams) { return std::bind(f, innerparams...); } }; template std::function bind_first(Ret (*f)(P1, Param...), O o) { return Bind_First::bind(f, o); } template std::function bind_first(Ret (Class::*f)(Param...), O o) { return Bind_First::bind(f, o); } template std::function bind_first(Ret (Class::*f)(Param...) const, O o) { return Bind_First::bind(f, o); } template std::function bind_first(const std::function &f, O o) { return Bind_First::bind(f, o); } } } #endif