A lightweight Command Line Argument Parser library using C++20.

Source

https://github.com/karnkaul/clap

Features

Options are set up by passing a binding reference and the relevant metadata. Bindings are set as options are encountered during parsing. Positional arguments are supported.

struct {
  bool debug{};
  int log_level{3};

  struct {
    std::string field{"name"};
    bool enabled{};
  } sort{};

} input{};

options
  // bind an option that's a boolean flag
  .flag(input.debug, "d,debug", "enable debugging")
  // bind an option that requires an int argument
  .required(input.log_level, "log-level", "set the log level", "3")
  // bind an option that takes an optional string argument
  .optional(input.sort.field, input.sort.enabled, "s,sort",
            "sort by", "name|date");

auto result = options.parse(argc, argv);

if (clap::should_quit(result)) { 
  return clap::return_code(result);
}