Finish removing std::function<>
This commit is contained in:
@@ -10,6 +10,31 @@
|
|||||||
namespace chaiscript {
|
namespace chaiscript {
|
||||||
namespace dispatch {
|
namespace dispatch {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
|
template<typename Ret, typename Class, typename ... Param>
|
||||||
|
struct Const_Caller
|
||||||
|
{
|
||||||
|
Const_Caller(Ret (Class::*t_func)(Param...) const) : m_func(t_func) {}
|
||||||
|
|
||||||
|
template<typename ... Inner>
|
||||||
|
Ret operator()(const Class &o, Inner&& ... inner) const {
|
||||||
|
return (o.*m_func)(std::forward<Inner>(inner)...);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ret (Class::*m_func)(Param...) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename Ret, typename Class, typename ... Param>
|
||||||
|
struct Caller
|
||||||
|
{
|
||||||
|
Caller(Ret (Class::*t_func)(Param...)) : m_func(t_func) {}
|
||||||
|
|
||||||
|
template<typename ... Inner>
|
||||||
|
Ret operator()(Class &o, Inner&& ... inner) const {
|
||||||
|
return (o.*m_func)(std::forward<Inner>(inner)...);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ret (Class::*m_func)(Param...);
|
||||||
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct Function_Signature
|
struct Function_Signature
|
||||||
|
@@ -126,17 +126,26 @@ namespace chaiscript
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename Ret, typename Class, typename ... Param>
|
template<typename Ret, typename Class, typename ... Param>
|
||||||
Proxy_Function fun(Ret (Class::*func)(Param...) const)
|
Proxy_Function fun(Ret (Class::*t_func)(Param...) const)
|
||||||
{
|
{
|
||||||
|
auto call = dispatch::detail::Const_Caller<Ret, Class, Param...>(t_func);
|
||||||
|
|
||||||
return Proxy_Function(
|
return Proxy_Function(
|
||||||
chaiscript::make_shared<dispatch::Proxy_Function_Base, dispatch::Proxy_Function_Impl<typename dispatch::detail::FunctionSignature<decltype(dispatch::detail::to_function(func)) >::Signature>>(dispatch::detail::to_function(func)));
|
chaiscript::make_shared<dispatch::Proxy_Function_Base, dispatch::Proxy_Function_Callable_Impl<Ret (const Class &, Param...), decltype(call)>>(call));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Ret, typename Class, typename ... Param>
|
template<typename Ret, typename Class, typename ... Param>
|
||||||
Proxy_Function fun(Ret (Class::*func)(Param...))
|
Proxy_Function fun(Ret (Class::*t_func)(Param...))
|
||||||
{
|
{
|
||||||
|
auto call = dispatch::detail::Caller<Ret, Class, Param...>(t_func);
|
||||||
|
|
||||||
return Proxy_Function(
|
return Proxy_Function(
|
||||||
chaiscript::make_shared<dispatch::Proxy_Function_Base, dispatch::Proxy_Function_Impl<typename dispatch::detail::FunctionSignature<decltype(dispatch::detail::to_function(func)) >::Signature>>(dispatch::detail::to_function(func)));
|
chaiscript::make_shared<dispatch::Proxy_Function_Base, dispatch::Proxy_Function_Callable_Impl<Ret (Class &, Param...), decltype(call)>>(call));
|
||||||
|
|
||||||
|
/*
|
||||||
|
return Proxy_Function(
|
||||||
|
chaiscript::make_shared<dispatch::Proxy_Function_Base, dispatch::Proxy_Function_Impl<typename dispatch::detail::FunctionSignature<decltype(dispatch::detail::to_function(t_func)) >::Signature>>(dispatch::detail::to_function(t_func)));
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user