-
Notifications
You must be signed in to change notification settings - Fork 0
Examples
simfeo edited this page Apr 23, 2024
·
15 revisions
#include <iostream>
#include "ArgParse/argparse.h"
int main(int argc, char** argv)
{
auto parser = argparse::ArgumentParser("Program name").SetDescription("Description of program");
parser.AddArgument(argparse::CreateNamedArgument()
.SetLongName("numbers")
.SetAnyNumberOfArgumentsButAtleastOne()
.SetType(argparse::ArgTypeCast::e_int));
parser.AddArgument(argparse::CreateNamedArgument()
.SetLongName("some_boring_long_name")
.SetAnyNumberOfArgumentsButAtleastOne()
.SetType(argparse::ArgTypeCast::e_int)
.SetHelp("some_boring_long_name description with some important information for user.")
.SetRequired(false));
auto obj = parser.ParseArgs(argc, argv);
if (obj.IsArgValid())
{
auto arg = obj.GetArg("numbers");
if (arg.GetArgumentExists())
{
for (auto& el : arg.GetAsVecInt())
{
std::cout << el << std::endl;
}
}
}
else
{
std::string help = parser.GetHelp(80);
std::cout << obj.GetErrorString() << std::endl;
std::cout << help << std::endl;
}
return 0;
}This exmaple will create program with keys -n, --number, -s, --some_boring_long_name, -h and --help. Help will be autogenerated. The types of numbers and some_boring_long_name are integers with count from 1 to infinite.
Typical output without any arguments:
main.cpp [-n,--numbers [n ...] ] [-s,--some_boring_long_name [s ...] ] -h,--help
Description of program
optional arguments:
-n,--numbers some numbers description with some important information
for user. Type: INT. Args count: at least one.
-s,--some_boring_long_name
some_boring_long_name description with some important information
for user. Type: INT. Args count: at least one.
-h,--help Show help!
Note actually terminal cannot get infinite numbers of arguments. In most cases maximum length of all input that terminal can pass is limited with 8 kb.
#include <iostream>
#include "ArgParse/argparse.h"
int main(int argc, char** argv)
{
auto parser = argparse::ArgumentParser(__FILE__).SetDescription("Description of program");
parser.AddArgument(argparse::CreateNamedArgument("n", "numbers", argparse::kFromOneToInfinteArgCount,
argparse::ArgTypeCast::e_int, false,
"some numbers description with some important information for user."));
parser.AddArgument(argparse::CreateNamedArgument("s", "some_boring_long_name", argparse::kFromOneToInfinteArgCount,
argparse::ArgTypeCast::e_int, false,
"some_boring_long_name description with some important information for user."));
auto obj = parser.ParseArgs(argc, argv);
if (obj.IsArgValid())
{
auto arg = obj.GetArg("numbers");
if (arg.GetArgumentExists())
{
for (auto& el : arg.GetAsVecInt())
{
std::cout << el << std::endl;
}
}
}
else
{
std::string help = parser.GetHelp(80);
std::cout << obj.GetErrorString() << std::endl;
std::cout << help << std::endl;
}
return 0;
}
#include <iostream>
#include "ArgParse/argparse.h"
int main(int argc, char** argv)
{
auto parser = argparse::ArgumentParser("main").SetDescription("ArgParse example");
parser.AddArgument(argparse::CreateNamedArgument("b", "b_key", 1, argparse::ArgTypeCast::e_int, true,
R"=(some "b_key" description with some important information for user)="));
parser.SetAddHelp(false);
auto obj = parser.ParseArgs(argc, argv);
if (obj.IsArgValid())
{
auto arg = obj.GetArg("b_key");
std::cout << arg.Get().type().name() << ": " << std::any_cast<int>(arg.Get()) << std::endl;
}
else
{
std::string help = parser.GetHelp(80);
std::cout << obj.GetErrorString() << std::endl;
std::cout << help << std::endl;
}
return 0;
}You can change 1 to 0 from this example. It will be flag, and you cannot access to it's content.