diff --git a/dispatchkit/function_call.hpp b/dispatchkit/function_call.hpp index d6b9c2d..1c16e46 100644 --- a/dispatchkit/function_call.hpp +++ b/dispatchkit/function_call.hpp @@ -54,19 +54,35 @@ namespace dispatchkit namespace dispatchkit { - template + template boost::function - build_function_caller(Function func) + build_function_caller(const std::vector > > &funcs) { FunctionType *p; - return build_function_caller_helper(p, func); + return build_function_caller_helper(p, funcs); } + template + boost::function + build_function_caller(boost::shared_ptr func) + { + std::vector > > funcs; + funcs.push_back(std::make_pair(std::string(), func)); + return build_function_caller(funcs); + } + template + boost::function + build_function_caller(const Boxed_Value &bv) + { + return build_function_caller(boxed_cast >(bv)); + } + + template boost::function build_functor(ScriptEngine &e, const std::string &script) { - return build_function_caller(boxed_cast >(e.evaluate_string(script))); + return build_function_caller(e.evaluate_string(script)); } } @@ -87,16 +103,6 @@ namespace dispatchkit return Function_Caller_Ret().call(funcs, params); } - template - boost::function - build_function_caller_helper(Ret (BOOST_PP_ENUM_PARAMS(n, Param)), boost::shared_ptr func) - { - std::vector > > funcs; - funcs.push_back(std::make_pair(std::string(), func)); - return boost::bind(&function_caller, funcs - BOOST_PP_ENUM_TRAILING(n, curry, ~)); - } - template boost::function build_function_caller_helper(Ret (BOOST_PP_ENUM_PARAMS(n, Param)), const std::vector > > &funcs) diff --git a/samples/callbacks.chai b/samples/callbacks.chai index 0d5394c..de16629 100644 --- a/samples/callbacks.chai +++ b/samples/callbacks.chai @@ -4,5 +4,4 @@ cb_handler.add_callbacks( function() { "DivOnePtTwo"; }, function (x) { x / 1.2; -cb_handler.add_callbacks( function() { "DivOnePtTwo"; }, function (x) { blargh; } );