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