Some performance improvements by using perfect argument forwarding
This commit is contained in:
@@ -59,7 +59,7 @@ namespace chaiscript
|
|||||||
Ret operator()(Param...param)
|
Ret operator()(Param...param)
|
||||||
{
|
{
|
||||||
return Function_Caller_Ret<Ret>::call(m_funcs, {
|
return Function_Caller_Ret<Ret>::call(m_funcs, {
|
||||||
(std::is_reference<Param>::value&&!(std::is_same<chaiscript::Boxed_Value, typename std::remove_const<typename std::remove_reference<Param>::type>::type>::value))?Boxed_Value(std::ref(param)):Boxed_Value(param)...
|
(std::is_reference<Param>::value&&!(std::is_same<chaiscript::Boxed_Value, typename std::remove_const<typename std::remove_reference<Param>::type>::type>::value))?Boxed_Value(std::ref(param)):Boxed_Value(param)...
|
||||||
}
|
}
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@@ -105,9 +105,9 @@ namespace chaiscript
|
|||||||
|
|
||||||
template<typename ... InnerParams>
|
template<typename ... InnerParams>
|
||||||
static Ret do_call(const std::function<Ret (Params...)> &f,
|
static Ret do_call(const std::function<Ret (Params...)> &f,
|
||||||
const std::vector<Boxed_Value> ¶ms, InnerParams ... innerparams)
|
const std::vector<Boxed_Value> ¶ms, InnerParams &&... innerparams)
|
||||||
{
|
{
|
||||||
return Call_Func<Ret, count - 1, Params...>::do_call(f, params, innerparams..., params[sizeof...(Params) - count]);
|
return Call_Func<Ret, count - 1, Params...>::do_call(f, params, std::forward<InnerParams>(innerparams)..., params[sizeof...(Params) - count]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -116,9 +116,9 @@ namespace chaiscript
|
|||||||
{
|
{
|
||||||
template<typename ... InnerParams>
|
template<typename ... InnerParams>
|
||||||
static Ret do_call(const std::function<Ret (Params...)> &f,
|
static Ret do_call(const std::function<Ret (Params...)> &f,
|
||||||
const std::vector<Boxed_Value> &, InnerParams ... innerparams)
|
const std::vector<Boxed_Value> &, InnerParams &&... innerparams)
|
||||||
{
|
{
|
||||||
return f(boxed_cast<Params>(innerparams)...);
|
return f(boxed_cast<Params>(std::forward<InnerParams>(innerparams))...);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user