mirror of
https://github.com/ChaiScript/ChaiScript.git
synced 2026-02-06 17:59:56 +08:00
Clean up bind_first implementation
This commit is contained in:
parent
fde90ad980
commit
3bd2a9c00d
@ -13,80 +13,15 @@ namespace chaiscript
|
|||||||
{
|
{
|
||||||
namespace detail
|
namespace detail
|
||||||
{
|
{
|
||||||
|
|
||||||
template<int>
|
|
||||||
struct Placeholder
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct Placeholder<1>
|
|
||||||
{
|
|
||||||
static decltype(std::placeholders::_1) value() { return std::placeholders::_1; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct Placeholder<2>
|
|
||||||
{
|
|
||||||
static decltype(std::placeholders::_2) value() { return std::placeholders::_2; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct Placeholder<3>
|
|
||||||
{
|
|
||||||
static decltype(std::placeholders::_3) value() { return std::placeholders::_3; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct Placeholder<4>
|
|
||||||
{
|
|
||||||
static decltype(std::placeholders::_4) value() { return std::placeholders::_4; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct Placeholder<5>
|
|
||||||
{
|
|
||||||
static decltype(std::placeholders::_5) value() { return std::placeholders::_5; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct Placeholder<6>
|
|
||||||
{
|
|
||||||
static decltype(std::placeholders::_6) value() { return std::placeholders::_6; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct Placeholder<7>
|
|
||||||
{
|
|
||||||
static decltype(std::placeholders::_7) value() { return std::placeholders::_7; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct Placeholder<8>
|
|
||||||
{
|
|
||||||
static decltype(std::placeholders::_8) value() { return std::placeholders::_8; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct Placeholder<9>
|
|
||||||
{
|
|
||||||
static decltype(std::placeholders::_9) value() { return std::placeholders::_9; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct Placeholder<10>
|
|
||||||
{
|
|
||||||
static decltype(std::placeholders::_10) value() { return std::placeholders::_10; }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template<int count, int maxcount, typename Sig>
|
template<int count, int maxcount, typename Sig>
|
||||||
struct Bind_First
|
struct Bind_First
|
||||||
{
|
{
|
||||||
template<typename F, typename ... InnerParams>
|
template<typename F, typename ... InnerParams>
|
||||||
static std::function<Sig> bind(F f, InnerParams ... innerparams)
|
static std::function<Sig> bind(F f, InnerParams ... innerparams)
|
||||||
{
|
{
|
||||||
return Bind_First<count - 1, maxcount, Sig>::bind(f, innerparams..., Placeholder<maxcount - count + 1>::value());
|
static auto placeholder = std::make_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);
|
||||||
|
|
||||||
|
return Bind_First<count - 1, maxcount, Sig>::bind(f, innerparams..., std::get<maxcount - count>(placeholder));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user