[Orxonox-commit 2506] r7213 - code/branches/consolecommands3/src/libraries/core/command

landauf at orxonox.net landauf at orxonox.net
Tue Aug 24 23:26:14 CEST 2010


Author: landauf
Date: 2010-08-24 23:26:14 +0200 (Tue, 24 Aug 2010)
New Revision: 7213

Modified:
   code/branches/consolecommands3/src/libraries/core/command/Functor.h
Log:
small changes in Functor, removed specialization for FunctorStatic (FunctorMember<void>) to gain cast-ability to FunctorPointer<F>

Modified: code/branches/consolecommands3/src/libraries/core/command/Functor.h
===================================================================
--- code/branches/consolecommands3/src/libraries/core/command/Functor.h	2010-08-24 14:56:37 UTC (rev 7212)
+++ code/branches/consolecommands3/src/libraries/core/command/Functor.h	2010-08-24 21:26:14 UTC (rev 7213)
@@ -33,7 +33,6 @@
 
 #include "core/CorePrereqs.h"
 
-#include "util/Convert.h"
 #include "util/Debug.h"
 #include "util/MultiType.h"
 #include "FunctorPtr.h"
@@ -113,6 +112,16 @@
             virtual const std::type_info& getHeaderIdentifier() const = 0;
     };
 
+    namespace detail
+    {
+        template <class O>
+        struct FunctorTypeStatic
+        { enum { result = false }; };
+        template <>
+        struct FunctorTypeStatic<void>
+        { enum { result = true }; };
+    }
+
     template <class O>
     class FunctorMember : public Functor
     {
@@ -123,7 +132,7 @@
 
             MultiType operator()(const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null)
             {
-                if (this->object_)
+                if (detail::FunctorTypeStatic<O>::result || this->object_)
                     return (*this)(this->object_, param1, param2, param3, param4, param5);
                 else
                 {
@@ -133,7 +142,7 @@
             }
 
             Functor::Type::Enum getType() const
-                { return Functor::Type::Member; }
+                { return detail::FunctorTypeStatic<O>::result ? Functor::Type::Static : Functor::Type::Member; }
 
             inline void setObject(O* object)
                 { this->object_ = object;}
@@ -149,26 +158,9 @@
             O* object_;
     };
 
-    template <>
-    class _CoreExport FunctorMember<void> : public Functor
-    {
-        public:
-            FunctorMember(void* = 0) {}
-
-            virtual MultiType operator()(void* object, const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) = 0;
-
-            MultiType operator()(const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null)
-            {
-                return (*this)(0, param1, param2, param3, param4, param5);
-            }
-
-            Functor::Type::Enum getType() const
-                { return Functor::Type::Static; }
-    };
-
     typedef FunctorMember<void> FunctorStatic;
 
-    template <class F, class O>
+    template <class F, class O = void>
     class FunctorPointer : public FunctorMember<O>
     {
         public:
@@ -237,7 +229,7 @@
         struct FunctorHeaderIdentifier
         {};
 
-        template <typename T>
+        template <class T>
         struct FunctorHasReturnvalue
         { enum { result = true }; };
         template <>




More information about the Orxonox-commit mailing list