27#define OPTION_END {nullptr, 0, NoArgument, nullptr}
37 std::map<std::string, std::string>
args;
54 bool has(
const std::string& name)
const {
55 return args.find(name) !=
args.end();
64 std::optional<std::string_view>
get(
const std::string& name)
const {
65 auto it =
args.find(name);
83 template<
typename T> std::optional<T>
get_as(
const std::string& name)
const {
84 auto value =
get(name);
89 if constexpr (std::is_same_v<T, std::string>) {
90 return std::string(*value);
91 }
else if constexpr (std::is_same_v<T, int>) {
92 return std::stoi(std::string(*value));
93 }
else if constexpr (std::is_same_v<T, size_t>) {
94 return static_cast<size_t>(std::stoull(std::string(*value)));
95 }
else if constexpr (std::is_same_v<T, double>) {
96 return std::stod(std::string(*value));
97 }
else if constexpr (std::is_same_v<T, bool>) {
98 return *value ==
"true";
100 static_assert(!
sizeof(T),
"Unsupported type");
bool parse_options(int argc, char *argv[], const std::vector< CliOption > &options, ParsedOptions &ctx_options)
Analyzes command-line arguments and populates ParsedOptions.
std::vector< std::string > extra_args
List of extra arguments that are not options.
bool has(const std::string &name) const
Checks whether an option exists.
std::optional< std::string_view > get(const std::string &name) const
Returns the value of an option.
std::optional< T > get_as(const std::string &name) const
Returns the value of an option converted to the requested type.
std::map< std::string, std::string > args
Map from option name to value.