From 487cc5b331f950ec95a2e7ba5f461d95cad659f6 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Tue, 21 Nov 2017 17:16:09 +0100 Subject: [PATCH] use context object reference in member abstraction --- alib2common/src/abstraction/AlgorithmRegistry.hpp | 8 ++++---- alib2common/src/abstraction/MemberAbstraction.hpp | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/alib2common/src/abstraction/AlgorithmRegistry.hpp b/alib2common/src/abstraction/AlgorithmRegistry.hpp index 8a499839a2..54de155a92 100644 --- a/alib2common/src/abstraction/AlgorithmRegistry.hpp +++ b/alib2common/src/abstraction/AlgorithmRegistry.hpp @@ -33,10 +33,10 @@ class AlgorithmRegistry { template < class ObjectType, class Return, class ... Params > class MemberImpl : public Entry { - std::function < Return ( ObjectType *, Params ... ) > m_callback; + std::function < Return ( typename std::remove_reference < ObjectType >::type *, Params ... ) > m_callback; public: - MemberImpl ( std::function < Return ( ObjectType *, Params ... ) > callback ) : m_callback ( callback ) { + MemberImpl ( std::function < Return ( typename std::remove_reference < ObjectType >::type *, Params ... ) > callback ) : m_callback ( callback ) { } virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override; @@ -111,14 +111,14 @@ public: std::string algorithm = ext::to_string < Algo > ( ) + "::" + methodName; ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > params = convertParamTypes < ParamTypes ... > ( paramNames ); - params.insert ( params.begin ( ), convertParamType < ObjectType > ( "object" ) ); + params.insert ( params.begin ( ), convertParamType < ObjectType & > ( "object" ) ); ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > > result = convertReturnType < ReturnType > ( ); if ( isRegistered ( algorithm, category, params ) ) throw exception::CommonException ( "Callback for " + algorithm + " already registered." ); - registerInternal ( std::move ( algorithm ), category, std::move ( result ), std::move ( params ), std::make_shared < MemberImpl < ObjectType, ReturnType, ParamTypes ... > > ( callback ) ); + registerInternal ( std::move ( algorithm ), category, std::move ( result ), std::move ( params ), std::make_shared < MemberImpl < ObjectType &, ReturnType, ParamTypes ... > > ( callback ) ); } template < class Algo, class ReturnType, class ... ParamTypes > diff --git a/alib2common/src/abstraction/MemberAbstraction.hpp b/alib2common/src/abstraction/MemberAbstraction.hpp index 86e17756cb..5b97189b1f 100644 --- a/alib2common/src/abstraction/MemberAbstraction.hpp +++ b/alib2common/src/abstraction/MemberAbstraction.hpp @@ -16,10 +16,10 @@ namespace abstraction { template < class ObjectType, class ReturnType, class ... ParamTypes > class MemberAbstraction : public NaryOperationAbstraction < ReturnType, ObjectType &, ParamTypes ... > { - std::function < ReturnType ( ObjectType *, ParamTypes ... ) > m_callback; + std::function < ReturnType ( typename std::remove_reference < ObjectType >::type *, ParamTypes ... ) > m_callback; public: - MemberAbstraction ( std::function < ReturnType ( ObjectType *, ParamTypes ... ) > callback ) : m_callback ( callback ) { + MemberAbstraction ( std::function < ReturnType ( typename std::remove_reference < ObjectType >::type *, ParamTypes ... ) > callback ) : m_callback ( callback ) { } virtual bool run ( ) override { -- GitLab