diff --git a/include/chaiscript/dispatchkit/function_call.hpp b/include/chaiscript/dispatchkit/function_call.hpp index 5f6eccd..8d3009d 100644 --- a/include/chaiscript/dispatchkit/function_call.hpp +++ b/include/chaiscript/dispatchkit/function_call.hpp @@ -30,7 +30,7 @@ namespace chaiscript functor(const std::vector > &funcs) { FunctionType *p=0; - return build_function_caller_helper(p, funcs); + return detail::build_function_caller_helper(p, funcs); } /** diff --git a/include/chaiscript/dispatchkit/function_call_detail.hpp b/include/chaiscript/dispatchkit/function_call_detail.hpp index 5e54927..7d1d0ce 100644 --- a/include/chaiscript/dispatchkit/function_call_detail.hpp +++ b/include/chaiscript/dispatchkit/function_call_detail.hpp @@ -30,7 +30,7 @@ namespace chaiscript * value of a build_function_caller */ template - class Function_Caller_Ret + struct Function_Caller_Ret { static Ret call(const std::vector > &t_funcs, const std::vector ¶ms) diff --git a/include/chaiscript/dispatchkit/type_info.hpp b/include/chaiscript/dispatchkit/type_info.hpp index 4aa7b59..980dfcd 100644 --- a/include/chaiscript/dispatchkit/type_info.hpp +++ b/include/chaiscript/dispatchkit/type_info.hpp @@ -106,6 +106,18 @@ namespace chaiscript } }; + template + struct Get_Type_Info &> + { + static Type_Info get() + { + return Type_Info(boost::is_const::value, boost::is_reference::value, boost::is_pointer::value, + boost::is_void::value, + &typeid(const boost::shared_ptr &), + &typeid(typename boost::remove_const::type>::type>::type)); + } + }; + template struct Get_Type_Info > { diff --git a/src/example.cpp b/src/example.cpp index de204e4..317e0cb 100644 --- a/src/example.cpp +++ b/src/example.cpp @@ -45,6 +45,10 @@ struct System } }; +void take_shared_ptr(const boost::shared_ptr &p) +{ + std::cout << *p << std::endl; +} int main(int argc, char *argv[]) { using namespace chaiscript; @@ -59,6 +63,8 @@ int main(int argc, char *argv[]) { chai.add(fun(&System::add_callback), "add_callback"); chai.add(fun(&System::do_callbacks), "do_callbacks"); + chai.add(fun(&take_shared_ptr), "take_shared_ptr"); + // Let's use chaiscript to add a new lambda callback to our system. // The function "{ 'Callback1' + x }" is created in chaiscript and passed into our C++ application // in the "add_callback" function of struct System the chaiscript function is converted into a @@ -123,5 +129,8 @@ int main(int argc, char *argv[]) { //mostly supported currently chai.add(bootstrap::vector_type >("IntVector")); + + chai("dump_system()"); + chai("take_shared_ptr(\"Hello World as a shared_ptr\");"); }