summaryrefslogtreecommitdiff
path: root/src/core/common/Function.hpp
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2014-12-21 23:46:14 +0100
committerAndreas Stöckel <andreas@somweyr.de>2014-12-21 23:46:14 +0100
commit9c02d6698f852d94736ce3a88e593bf45d22361d (patch)
treea6c8fbe7e65278fc958d05ded8a6d2c9edf63426 /src/core/common/Function.hpp
parent1a7c77c9175c4e9ed5c554b1986d4f2bf8b18197 (diff)
allowing to store Function objects in Variants, added simple unit test for the Method class
Diffstat (limited to 'src/core/common/Function.hpp')
-rw-r--r--src/core/common/Function.hpp24
1 files changed, 10 insertions, 14 deletions
diff --git a/src/core/common/Function.hpp b/src/core/common/Function.hpp
index 8113c9d..04030c8 100644
--- a/src/core/common/Function.hpp
+++ b/src/core/common/Function.hpp
@@ -36,15 +36,18 @@ namespace ousia {
/**
* The Function interface defines all the methods needed to represent a
- * generic function. Function objects can be called using the "call" function in
+ * generic function. Function objects can be called using the "call" function in
* which an array of Variant is supplied to the function and a Variant is
* returned to the caller.
*/
class Function {
+protected:
+ Function() {};
+
public:
- Function(const Function&) = delete;
- Function(Function&&) = delete;
- virtual ~Function() {};
+ Function(const Function &) = delete;
+ Function(Function &&) = delete;
+ virtual ~Function(){};
/**
* Abstract function which is meant to call the underlying function (be it
@@ -90,29 +93,22 @@ public:
*
* @param method is a pointer at the C++ function that should be called.
*/
- Method(Callback method) : method(method){};
+ Method(Callback method) : method(method) {};
/**
* Calls the underlying method.
*
- * @param args is a vector containing all arguments that shouild be passed
+ * @param args is a vector containing all arguments that should be passed
* to the method.
* @return a Variant containing the return value.
*/
Variant call(const Variant::arrayType &args = Variant::arrayType{},
void *thisRef = nullptr) const override
{
- // Dynamically cast thisRef to the given type
- T *tRef = dynamic_cast<T>(thisRef);
-
- // Make sure the cast is successfull
- assert(tRef != nullptr);
-
// Call the method
- return method(args, tRef);
+ return method(args, static_cast<T*>(thisRef));
}
};
-
}
#endif /* _OUSIA_FUNCTION_HPP_ */