浏览代码

cmCommandLineArgument: Add setToTrue() and setToValue() helpers

Kyle Edwards 3 年之前
父节点
当前提交
0645d08c98
共有 1 个文件被更改,包括 50 次插入0 次删除
  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
   {