cmCommandLineArgument: Add setToTrue() and setToValue() helpers

This commit is contained in:
Kyle Edwards
2022-04-15 15:17:05 -04:00
parent 6453bd046e
commit 0645d08c98

View File

@@ -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
{