Merge pull request #33 from ros2/function-traits-lambda

Added support for lambdas
This commit is contained in:
Dirk Thomas 2015-05-18 14:34:01 -07:00
commit 198b40a0bf

View file

@ -47,9 +47,16 @@ class Executor;
namespace node namespace node
{ {
// TODO: add support for functors, std::function, lambdas and object members
template<typename FunctionT> template<typename FunctionT>
struct function_traits; struct function_traits
{
static constexpr std::size_t arity =
function_traits<decltype( & FunctionT::operator())>::arity - 1;
template<std::size_t N>
using argument_type =
typename function_traits<decltype( & FunctionT::operator())>::template argument_type<N + 1>;
};
template<typename ReturnTypeT, typename ... Args> template<typename ReturnTypeT, typename ... Args>
struct function_traits<ReturnTypeT(Args ...)> struct function_traits<ReturnTypeT(Args ...)>
@ -64,6 +71,11 @@ template<typename ReturnTypeT, typename ... Args>
struct function_traits<ReturnTypeT (*)(Args ...)>: public function_traits<ReturnTypeT(Args ...)> struct function_traits<ReturnTypeT (*)(Args ...)>: public function_traits<ReturnTypeT(Args ...)>
{}; {};
template<typename ClassT, typename ReturnTypeT, typename ... Args>
struct function_traits<ReturnTypeT (ClassT::*)(Args ...) const>
: public function_traits<ReturnTypeT(ClassT &, Args ...)>
{};
/* ROS Node Interface. /* ROS Node Interface.
* *
* This is the single point of entry for creating publishers and subscribers. * This is the single point of entry for creating publishers and subscribers.