Procházet zdrojové kódy

cmCommandLineArgument: Add setToTrue() and setToValue() helpers

Kyle Edwards před 3 roky
rodič
revize
0645d08c98
1 změnil soubory, kde provedl 50 přidání a 0 odebrání
  1. 50 0
      Source/cmCommandLineArgument.h

+ 50 - 0
Source/cmCommandLineArgument.h

@@ -201,7 +201,57 @@ struct cmCommandLineArgument
     return (parseState == ParseMode::Valid);
   }
 
+  template <typename... Values>
+  static std::function<FunctionSignature> setToTrue(Values&&... values)
+  {
+    return ArgumentLambdaHelper<FunctionSignature>::generateSetToTrue(
+      std::forward<Values>(values)...);
+  }
+
+  template <typename... Values>
+  static std::function<FunctionSignature> setToValue(Values&&... values)
+  {
+    return ArgumentLambdaHelper<FunctionSignature>::generateSetToValue(
+      std::forward<Values>(values)...);
+  }
+
 private:
+  template <typename T>
+  class ArgumentLambdaHelper;
+
+  template <typename... CallState>
+  class ArgumentLambdaHelper<bool(const std::string&, CallState...)>
+  {
+  public:
+    static std::function<bool(const std::string&, CallState...)>
+    generateSetToTrue(bool& value1)
+    {
+      return [&value1](const std::string&, CallState&&...) -> bool {
+        value1 = true;
+        return true;
+      };
+    }
+
+    static std::function<bool(const std::string&, CallState...)>
+    generateSetToTrue(bool& value1, bool& value2)
+    {
+      return [&value1, &value2](const std::string&, CallState&&...) -> bool {
+        value1 = true;
+        value2 = true;
+        return true;
+      };
+    }
+
+    static std::function<bool(const std::string&, CallState...)>
+    generateSetToValue(std::string& value1)
+    {
+      return [&value1](const std::string& arg, CallState&&...) -> bool {
+        value1 = arg;
+        return true;
+      };
+    }
+  };
+
   std::string extract_single_value(std::string const& input,
                                    ParseMode& parseState) const
   {