Some performance improvements by using perfect argument forwarding

This commit is contained in:
Jason Turner
2012-05-14 17:45:30 -06:00
parent 98d2eadde2
commit 48ecb3e2b4
2 changed files with 5 additions and 5 deletions

View File

@@ -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)...
} }
); );

View File

@@ -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> &params, InnerParams ... innerparams) const std::vector<Boxed_Value> &params, 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))...);
} }
}; };