A light weight C++ in memory argument parser.
- Single header file
- Requires C++20
- Less than 200 lines of code
- Apache 2.0 License
Simply include argz.hpp
and you're good to go.
#include <argz/argz.hpp>
Start with an about: argz::about
constexpr std::string_view version = "1.2.3";
argz::about about{ "My program description", version };
To add a new argument, simply create argz::options
. Provide a list of argument names that you want to group together, e.g. -i
and --input
.
std::string input{};
std::string study{};
int number = 123;
bool boolean = true;
std::optional<int> number_opt{};
argz::options opts{
{ { "input", 'i' }, input, "the input file"},
{ { "study", 's' }, study, "a study file"},
{ { "number" }, number, "input an int"},
{ { "boolean" }, boolean, "a boolean" },
{ { "number_opt" }, number_opt, "input an int"}
};
Now to parse command line arguments:
try {
argz::parse(about, opts, argc, argv);
}
catch (const std::exception& e) {
std::cerr << e.what() << '\n';
}
That is all!
Note that we don't have to cast out (.e.g.
.as<int>
) from our argument parser because it reads directly into the variables passed in as options!
-h
prints a help message, including the program usage and information about the arguments registered with the Argz Parser. An example help message:
My program description
Version: 1.2.3
-h, --help write help to console
-v, --version write the version to console
-i, --input the input file
-s, --study a study file
--number input an int, default: 123
--boolean a boolean, default: 1
bool
, int32_t
, uint32_t
, int64_t
, uint64_t
, std::string
And std::optional<T>
where T
is any of the above types except bool
By default the help is printed when no inputs are given. If this behavior is not desirable, set print_help_when_no_options
to false inside of argz::about
.
argz::about about{ "My program description", version,
.print_help_when_no_options = false };