Possibility to handle class method & example
authorRafał Długołęcki <rafal@dlugolecki.net.pl>
Mon, 8 Feb 2016 19:38:58 +0000 (20:38 +0100)
committerRafał Długołęcki <rafal@dlugolecki.net.pl>
Mon, 8 Feb 2016 19:38:58 +0000 (20:38 +0100)
include/argument.h
include/option.h
src/main.cpp

index 2cd3c300f970a8d2e205de7685a6f10fd9ad241d..bf5fc3354f304c7b894252069969451275ec7fff 100644 (file)
@@ -32,10 +32,6 @@ namespace command {
          * @param description Description of current Argument
          * @param function Function used to handle current Argument.
          */
-        Argument(const std::string & description, void (*function)(ParameterType))
-            : Parameter(description), Callable<ParameterType>(function) {
-        }
-
         Argument(const std::string & description, std::function<void(ParameterType)> function)
             : Parameter(description), Callable<ParameterType>(function) {
         }
index 7e9917b589c7021a0c5852695e90eecb5fa36908..d9630a798b486bed5225e802d09c519e85c4ef4c 100644 (file)
@@ -44,7 +44,7 @@ namespace command {
          * @param description Description of current Option
          * @param function Function used to handle current Option.
          */
-        Option(const std::string & name, const std::string & description, void (*function)(ParameterType))
+        Option(const std::string & name, const std::string & description, std::function<void(ParameterType)> function)
             : Parameter(description), Callable<ParameterType>(function), name(name) {
         }
 
@@ -158,7 +158,7 @@ namespace command {
          * @param description Description of current Option
          * @param function Function used to handle current Option.
          */
-        Option(const std::string & name, const std::string & description, void (*function)(void))
+        Option(const std::string & name, const std::string & description, std::function<void(void)> function)
             : Parameter(description), Callable<void>(function), name(name) {
         }
 
index 5ad96a22520a2e9f5c1547e8e184d2f3f3a3e674..ac7a62670e9c757993c4a75d16b8ac7816ada5c0 100644 (file)
@@ -1,5 +1,6 @@
 #include <iostream>
 #include <string>
+#include <functional>
 
 #include "option.h"
 #include "argument.h"
@@ -22,19 +23,47 @@ void void_function(void) {
     std::cout << "Void function " << std::endl;
 }
 
+class ExampleClass {
+public:
+    void _argument(bool a) {
+        argument_function(a);
+    }
+    void _option(std::string a) {
+        option_function(a);
+    }
+    void _void(void) {
+        void_function();
+    }
+};
+
 int main(int argc, char *argv[]) {
+    Class c;
+
     try {
         Command command(argc, argv, {
             new Grouped({
-                new Required(new MultiValue("-", new Argument<bool>("Input values", argument_function))),
-                new MultiValue(",", new Option<std::string>("f", "Optional file", option_function))
+                new Required(
+                    new MultiValue("-",
+                        new Argument<bool>("Input values", std::bind(&ExampleClass::_argument, &c, std::placeholders::_1))
+                    )
+                ),
+                new MultiValue(",",
+                    new Option<std::string>("f", "Optional file", std::bind(&ExampleClass::_option, &c, std::placeholders::_1))
+                )
             }),
-            new Option<void>("h", "Help", void_function)
+            new Option<void>("h", "Help", std::bind(&ExampleClass::_void, &c)),
+
+            // just a pure method calling
+            new Option<void>("v", "version", void_function)
         });
+
+        /* ExampleClass is initialized.
+         * You can run your main program now
+         */
     }
     catch(const std::exception & e) {
         std::cout << e.what() << std::endl;
     }
 
     return 0;
-}
\ No newline at end of file
+}