#define __COMMAND_CALLABLE_H
#include <string>
+#include <functional>
namespace command {
/**
* Callable behaviour class.
*/
- template<typename ArgumentType>
+ template<typename ParameterType>
class Callable {
protected:
/**
* Function handling user Arguments
*/
- void (*func)(ArgumentType);
+// void (*func)(ParameterType);
+ std::function<void(ParameterType)> func;
public:
/**
*
* @param function Function that will be invoked
*/
- Callable(void (*function)(ArgumentType))
+// Callable(void (*function)(ParameterType))
+// : func(function) {
+// }
+
+ Callable(std::function<void(ParameterType)> function)
: func(function) {
}
+
virtual ~Callable() { }
protected:
*
* @param value Value passed to program argument
*/
- void call(ArgumentType value) {
+ void call(ParameterType value) {
this->func(value);
}
};
+
+ /**
+ * Template specialization of Callable behaviour class.
+ * Allows passing functions with void argument
+ */
+ template<>
+ class Callable<void> {
+ protected:
+ /**
+ * Function handling user Arguments
+ */
+// void (*func)(void);
+ std::function<void(void)> func;
+
+ public:
+ /**
+ * Default constructor.
+ *
+ * @param function Function that will be invoked
+ */
+// Callable(void (*function)(void))
+// : func(function) {
+// }
+
+ Callable(std::function<void(void)> function)
+ : func(function) {
+ }
+
+ virtual ~Callable() { }
+
+ protected:
+ /**
+ * Executes command
+ */
+ void call() {
+ this->func();
+ }
+ };
}
#endif /* __COMMAND_DESCRIPTIVE_H */