-
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;
}
generic -h, --help is suppressed example compiles for c++17 and uses std::any approach
#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.
Positional argument should be inputted as raw argument without any key. This is only difference between keyed and positional arguments.
#include <iostream>
#include "ArgParse/argparse.h"
int main(int argc, char** argv)
{
auto parser = argparse::ArgumentParser("main").SetDescription("ArgParse example");
parser.AddArgument(argparse::CreatePositionalArgument("int1").SetType(argparse::ArgTypeCast::e_int).SetRequired(false));
auto obj = parser.ParseArgs(argc, argv);
if (obj.IsArgValid())
{
auto arg = obj.GetArg("int1");
if (arg.GetArgumentExists())
{
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;
}