From 48ecb3e2b4bb4e4d28ded17e5082fda00863af7c Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Mon, 14 May 2012 17:45:30 -0600 Subject: [PATCH] Some performance improvements by using perfect argument forwarding --- include/chaiscript/dispatchkit/function_call_detail.hpp | 2 +- include/chaiscript/dispatchkit/proxy_functions_detail.hpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/chaiscript/dispatchkit/function_call_detail.hpp b/include/chaiscript/dispatchkit/function_call_detail.hpp index 15ffaf3..e41e85c 100644 --- a/include/chaiscript/dispatchkit/function_call_detail.hpp +++ b/include/chaiscript/dispatchkit/function_call_detail.hpp @@ -59,7 +59,7 @@ namespace chaiscript Ret operator()(Param...param) { return Function_Caller_Ret::call(m_funcs, { -(std::is_reference::value&&!(std::is_same::type>::type>::value))?Boxed_Value(std::ref(param)):Boxed_Value(param)... +(std::is_reference::value&&!(std::is_same::type>::type>::value))?Boxed_Value(std::ref(param)):Boxed_Value(param)... } ); diff --git a/include/chaiscript/dispatchkit/proxy_functions_detail.hpp b/include/chaiscript/dispatchkit/proxy_functions_detail.hpp index f8901e3..579074b 100644 --- a/include/chaiscript/dispatchkit/proxy_functions_detail.hpp +++ b/include/chaiscript/dispatchkit/proxy_functions_detail.hpp @@ -105,9 +105,9 @@ namespace chaiscript template static Ret do_call(const std::function &f, - const std::vector ¶ms, InnerParams ... innerparams) + const std::vector ¶ms, InnerParams &&... innerparams) { - return Call_Func::do_call(f, params, innerparams..., params[sizeof...(Params) - count]); + return Call_Func::do_call(f, params, std::forward(innerparams)..., params[sizeof...(Params) - count]); } }; @@ -116,9 +116,9 @@ namespace chaiscript { template static Ret do_call(const std::function &f, - const std::vector &, InnerParams ... innerparams) + const std::vector &, InnerParams &&... innerparams) { - return f(boxed_cast(innerparams)...); + return f(boxed_cast(std::forward(innerparams))...); } };